Springmvc 4.x使用@ResponseBody出现406问题

来源:互联网 发布:睡不够是什么原因知乎 编辑:程序博客网 时间:2024/05/17 04:45

以前使用springmvc 3.x的时候没怎么注意,也没有验证,在我们使用请求以html为后缀时,request对应的content-type 用的是html/text,导致无法返回正确的json,现在使用4.x的时候,出现了这样的问题,找了各种办法都没有解决,最后看到在获取MediaTypes的时候有几个策略,


,通过断点看到strategies默认是有两个ServletPathExtensionContentNegotiationStrategy、HeaderContentNegotiationStrategy,一个是根据请求路径获取,一个是根据请求头获取,如果我们的请求为.html,且先执行第一个策略,那么response对应的Content-Type也就固定了,这个时候不论这么设置都无效,现在解决方案,在spring xml中加上以下代码:

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/>   <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">   <property name="favorPathExtension" value="false" />  <property name="favorParameter" value="false" />   <property name="ignoreAcceptHeader" value="false" />   <property name="mediaTypes" >   <value>  atom=application/atom+xml  html=text/html  json=application/json*=*/*  </value>   </property>  </bean>
在策略工厂取消根据请求后缀获取MediaTypes的方案即可


阅读全文
0 0
原创粉丝点击