我想根据我在RESTful端点收到的Accept
标头提供不同的内容类型。
application/myapp-v1.0+json
application/myapp-v1.0+xml
有没有办法用@ResponseBody
执行此操作?这似乎是一个方便的快捷方式,允许我只返回一个对象并让HttpMessageConverter
句柄调用杰克逊,但我无法让它工作。当我连接多个MimeType时,406响应。
对于这个迭代,我最终自己查询了请求头并自己返回了相应的视图处理程序,但我不介意将来重新审视它。
答案 0 :(得分:0)
如果您使用的是Spring 3.1,则可以使用@RequestMapping
执行此操作。 RequestMapping
注释的新增内容为这些成员:
consumes()
- 允许您按Content-type
请求标头进行过滤。produces()
- 允许您按Accept
请求标头进行过滤。还可以应用一些简单的表达式,使其更加健壮。
@RequestMapping(consumes = {"application/json", "application/xml"})
@RequestMapping(consumes = {"!text/plain"})
答案 1 :(得分:0)
你可以按照这个SO问题的建议做一些事情:
Managing custom Acccept header in Spring MVC
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")));
}
}
...