SpringMVC配置*.html出現HTTP406問題

轉載文章, https://blog.csdn.net/hzygcs/article/details/80666117

.html作爲接口的後綴名,隱藏了具體實現技術,使得url形成了一種僞路徑,間接增強了安全性。


由於之前做的大都是業務系統,習慣了以.do結尾定義接口,但是網站一般都是暴露在外面的,所以爲了增強系統安全性,選擇使用.html接口後綴。框架是基於SpringMVC的,前端獲取數據時遇到了406 Not Acceptable錯誤。於是先查了下406響應碼的含義:406 表示請求資源的MIME類型與客戶端Accept頭信息中指定的類型不一致。然後在瀏覽器調試窗口裏看了下,果真如此。
http406

主要原因:
在SpringMVC框架下,如果沒有配置具體的請求和響應對應方式的話,它會根據url的後綴名自動對應響應頭的格式。而.html對應的響應格式爲text/html。因此出現了上述所說的406問題。

解決方法:
我使用的Spring版本爲4.1.9.RELEASE,如果要使用@ResponseBody註解返回json格式,需要引入這個包:jackson-databind。然後在sping-mvc.xml中更新配置如下:

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
    <!-- true,開啓擴展名支持,false關閉支持 -->
    <property name="favorPathExtension" value="false" />
</bean>

OR:

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />
<!-- 以.html爲後綴名訪問,默認返回數據類型是 text/html, 所以要修改返回的數據類型 -->
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
    <property name="mediaTypes">  
        <map>  
            <entry key="html" value="application/json;charset=UTF-8"/>          
        </map>  
    </property>
</bean>

ContentNegotiationManager是用來配置內容協商選項的中心類,主要用來配置多視圖請求格式,簡單說就是根據請求規則決定返回什麼樣的內容類型。


 

————本文結束感謝您的閱讀————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章