天天看點

SSM架構中 出現的406 (Not Acceptable)

SSM架構中 出現的406 (Not Acceptable)

首先,需要清楚,http state 406代表什麼意思:

406是HTTP協定狀态碼的一種,表示無法使用請求的特性來響應請求的網頁。一般指用戶端浏覽器不接受所請求頁面的MIME類型。

出現這樣的錯誤無非就是三種情況:

在ssm架構中使用的@ResponseBody注解或将傳回值變成json的形式傳回到前台頁面。

1、json所依賴的jar包不存在。

    1).如果是maven項目的話,可以将

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.7.3</version>
</dependency>

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.7.3</version>
</dependency>

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.7.3</version>
</dependency>
           

引入到pom檔案中。

    然後,

<!--json轉化器,它可以将結果轉化-->
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="supportedMediaTypes">
        <list>
            <value>text/json;charset=UTF-8</value>
        </list>
    </property>
</bean>      

2)、spring和jackson版本對不上:

        如果是使用的spring 4.0.*的話,可以引入jackson1.9.*的包,

        如果是使用的spring4.1.*的話,可以引入jackson2.7.*的。

3)、我出現的就是第三種情況,

        對應請求的字尾是.html的。

        如果是以html為字尾的,傳回的預設類型是text/html,而請求的是application/json的類型,浏覽器無法解析,就會報錯。

        :解決方法:是以我們要針對此情況進行配置,更改html對應傳回的類型。(注意:1、先聲明下我使用的spring 版本:4.1.9,2、如果想要使用@ResponseBody傳回json格式,就需要加載這三個包:jackson-core、jackson-databind和jackson-annotations,請自行去mvn repository中擷取) 一般我們是配置在mvc配置檔案中需要配置<mvc:annotation-driven />, 是以我們隻要修改下這裡就行,修改配置代碼如下:

<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>
           

然後重新開機一下項目,就可以正常請求了。

繼續閱讀