Spring @ResponseBody和特定于版本的Accept标头

时间:2012-08-21 17:59:51

标签: spring rest

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

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

有没有办法用@ResponseBody执行此操作?这似乎是一个方便的快捷方式,允许我只返回一个对象并让HttpMessageConverter句柄调用杰克逊,但我无法让它工作。当我连接多个MimeType时,406响应。

对于这个迭代,我最终自己查询了请求头并自己返回了相应的视图处理程序,但我不介意将来重新审视它。

2 个答案:

答案 0 :(得分:0)

如果您使用的是Spring 3.1,则可以使用@RequestMapping执行此操作。 RequestMapping注释的新增内容为这些成员:

  1. consumes() - 允许您按Content-type请求标头进行过滤。
  2. produces() - 允许您按Accept请求标头进行过滤。
  3. 还可以应用一些简单的表达式,使其更加健壮。

    @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")));
    }
}

...