1

我想根据在AcceptRESTful 端点收到的标头提供不同的内容类型。

application/myapp-v1.0+json
application/myapp-v1.0+xml

有什么办法可以做到这一点@ResponseBody吗?通过允许我只返回一个对象并让句柄调用杰克逊,这似乎是一个方便的捷径,HttpMessageConverter但我就是无法让它工作。每当我连接多个 MimeType 时,都会出现 406 响应。

对于这次迭代,我最终自己查询了请求标头并自己返回了适当的视图处理程序,但我不介意将来重新访问它。

4

2 回答 2

0

如果您使用的是 Spring 3.1,则可以使用@RequestMapping. 注释3.1 的新RequestMapping成员是这些成员:

  1. consumes()-- 允许您按Content-type请求标头过滤。
  2. produces()-- 允许您按Accept请求标头过滤。

还可以应用一些简单的表达式来使其更加健壮。

@RequestMapping(consumes = {"application/json", "application/xml"})

@RequestMapping(consumes = {"!text/plain"})
于 2012-08-21T18:23:41.293 回答
0

您可能可以按照这个 SO question 中的建议做一些事情:

在 Spring MVC 中管理自定义 Accept 标头

class MyAppV1JsonConverter extends MappingJacksonHttpMessageConverter{
    public MyAppV1JsonConverter (){
        super(MediaType.valueOf("application/myapp-v1.0+json"));
        // OR setSupportedMediaTypes(Collections.singletonList(MediaType.valueOf("application‌​/myapp-v1.0+json")));
    }
}

..

于 2012-08-21T19:19:07.400 回答