一,问题来源: 
昨天晚上在搭建ssm框架时,进行到了配置springMVC支持ajax-json的步骤,按照以前做过的springMVC 3.x 框架进行配置。测试访问时,出现了这样的问题。 
406错误

二,问题分析: 
1,检查Controller中的方法是否添加@ResponseBody。(已添加) 
2,检查ajax函数是否没写dataType:’json’。(写上了) 
3,检查springMVC.xml关于支持返回json数据的处理。(写上了)

  <!-- 处理请求response返回值,如下配置能正确返回字符串型返回值,如返回值为对象,则自动转为json -->

    <bean id="mappingJacksonHttpMessageConverter"
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>application/json; charset=UTF-8</value>
                <value>text/html; charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <bean id="mappingStringHttpMessageConverter"
        class="org.springframework.http.converter.StringHttpMessageConverter" />

    <bean id="handleAdapter"
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->
            </list>
        </property>
    </bean>

5,又检查了jackson的jar是否添加(已经添加)。

那么问题在哪里呢?

三,深入分析: 
通过查阅资料,发现: 
1,springMVC3.x 和springMVC4.x所依赖的jackson的jar包有所变更: 
3.x:

        <dependency>  
            <groupId>org.codehaus.jackson</groupId>  
            <artifactId>jackson-core-lgpl</artifactId>  
            <version>1.8.1</version>  
         </dependency>  
        <dependency>  
            <groupId>org.codehaus.jackson</groupId>  
            <artifactId>jackson-mapper-lgpl</artifactId>  
            <version>1.8.1</version>  
        </dependency>

4.x:将使用全新的jackson-annotations-2.5.0.jar,jackson-core-2.5.0.jar,jackson-databind-2.5.0.jar 原有的jar不再使用

<dependency>

              <groupId>com.fasterxml.jackson.jaxrs</groupId>

              <artifactId>jackson-jaxrs-xml-provider</artifactId>

              <version>2.5.2</version>

        </dependency>


        <dependency>  

            <groupId>com.fasterxml.jackson.core</groupId>  

            <artifactId>jackson-core</artifactId>  

            <version>2.5.2</version>  

        </dependency>  


        <dependency>  

            <groupId>com.fasterxml.jackson.core</groupId>  

            <artifactId>jackson-databind</artifactId>  

            <version>2.5.2</version>  

        </dependency>  


        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-annotations</artifactId>

            <version>2.5.2</version>

        </dependency>

2:仔细检查发现:springMVC.xml头文件上的xsi:schemaLocation里版本显示的还是3.x,这里手动改成4.x。 
3:spring4.x关于json的配置方式有所变更(重点) 
3.x:

<mvc:annotation-driven />

    <!-- 处理请求response返回值,如下配置能正确返回字符串型返回值,如返回值为对象,则自动转为json -->

    <bean id="mappingJacksonHttpMessageConverter"

        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

        <property name="supportedMediaTypes">

            <list>

                <value>application/json; charset=UTF-8</value>

                <value>text/html; charset=UTF-8</value>

            </list>

        </property>

    </bean>

    <bean id="mappingStringHttpMessageConverter"

        class="org.springframework.http.converter.StringHttpMessageConverter" />


    <bean id="handleAdapter"

        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

        <property name="messageConverters">

            <list>

                <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->

            </list>

        </property>

    </bean>

4.x :

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/>

    <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">

        <property name="favorPathExtension" value="false" />

    </bean>

    <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>  


    <bean id="stringConverter"  

        class="org.springframework.http.converter.StringHttpMessageConverter">  

        <property name="supportedMediaTypes">  

            <list>  

                <value>text/plain;charset=UTF-8</value>  

            </list>  

        </property>  

    </bean>  


    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  

        <property name="messageConverters">  

            <list>  

                <ref bean="stringConverter" />  

                <ref bean="jsonConverter" />  

            </list>  

        </property>  

    </bean>

四,问题解决: 
通过修改以上配置信息后,问题解决。

五,分析总结: 
1,头文件信息要与使用的spring版本一致。 
2,spring3MVC和spring4MVC对于 处理返回json 所使用的jar包不同。 
3,spring3MVC和spring4MVC 对于springMVC.xml中对于处理返回json配置方式不同。

六,感谢: 

关于springMVC 4.x配置ajax-json 出现406错误的问题。 - 博客频道 - CSDN.NET  http://blog.csdn.net/a116475939/article/details/50588364

你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您好,欢迎到访网站!
  查看权限

«   2018年6月   »
123
45678910
11121314151617
18192021222324
252627282930

最新留言