您的位置:首页 > 编程语言 > Java开发

关于springMVC 4.x配置ajax-json 出现406错误的问题。

2016-01-26 16:44 549 查看
一,问题来源:

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



二,问题分析:

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配置方式不同。

六,感谢:

http://www.zuidaima.com/question/2051293900327936.htm

这里帮我找到了答案。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: