【问题标题】:Spring @ResponseBody and version specific Accept headerSpring @ResponseBody 和特定于版本的 Accept 标头
【发布时间】:2012-08-21 17:59:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: spring rest


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      您可能可以按照这个 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")));
          }
      }
      

      ..

      【讨论】:

        猜你喜欢
        • 2011-07-15
        • 2018-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 2013-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多