【问题标题】:Managing custom Acccept header in Spring MVC在 Spring MVC 中管理自定义 Accept 标头
【发布时间】:2012-08-15 04:38:35
【问题描述】:

我有一个使用 Spring MVC 开发的 RESTful Web 服务,无需任何配置,我可以从我的 @ResponseBody 带注释的控制器方法返回对象,这些方法被序列化为 JSON。只要未设置请求中的 Accept 标头或为 application/json,此功能就会起作用。

由于受到 GitHub API 规范的启发,我想为我的 API 实现自定义 mime 类型为GitHub does,例如:application/vnd.myservice+json。但是我需要告诉 Spring MVC,我的控制器可以提供这种 mime 类型并且它应该由 Json 序列化(即 org.springframework.web.servlet.view.json.MappingJacksonJsonView 类)。

知道怎么做吗?

【问题讨论】:

    标签: spring rest spring-mvc


    【解决方案1】:

    您可能完全可以使用org.springframework.http.converter.json.MappingJacksonHttpMessageConverter 完成正在执行的操作。由于它不是最终类,因此您可以通过这种方式从中派生转换器:

    class MyCustomVndConverter extends MappingJacksonHttpMessageConverter{
        public MyCustomVndConverter (){
            super(MediaType.valueOf("application/vnd.myservice+json"));
        }
    }
    

    然后以这种方式注册您的转换器:

    <mvc:annotation-driven> 
       <mvc:message-converters register-defaults="true">
           <bean class="MyCustomVndConverter "/>
       </mvc:message-converters>
    </mvc:annotation-driven>
    

    它应该只适用于这些更改

    【讨论】:

    • 谢谢,您为我指明了正确的方向。我只需要调用setSupportedMediaTypes(Collections.singletonList(MediaType.valueOf("application/vnd.myservice+json"))); 而不是调用super 构造函数。顺便提一句。遗憾的是 MappingJacksonHttpMessageConverter 在其构造函数中没有像 super(MediaType.valueOf("application/*+json")) 这样的东西,因为它可以开箱即用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2013-10-06
    • 2014-08-23
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多