Springmvc 4.x使用@ResponseBody出現406問題
阿新 • • 發佈:2019-01-26
以前使用springmvc 3.x的時候沒怎麼注意,也沒有驗證,在我們使用請求以html為字尾時,request對應的content-type 用的是html/text,導致無法返回正確的json,現在使用4.x的時候,出現了這樣的問題,找了各種辦法都沒有解決,最後看到在獲取MediaTypes的時候有幾個策略,
,通過斷點看到strategies預設是有兩個ServletPathExtensionContentNegotiationStrategy、HeaderContentNegotiationStrategy,一個是根據請求路徑獲取,一個是根據請求頭獲取,如果我們的請求為.html,且先執行第一個策略,那麼response對應的Content-Type也就固定了,這個時候不論這麼設定都無效,現在解決方案,在spring xml中加上以下程式碼:
在策略工廠取消根據請求字尾獲取MediaTypes的方案即可<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>