Spring MVC 4.1.4 RESTFUL风格返回JSON数据406错误处理 .
2015-07-21 14:20
1051 查看
今天在使用spring4.1.4,使用ResponseBody注解返回JSON格式的数据的时候遇到406错误。
解决办法,导入jackson2.X的jar包:
jackson-annotations-2.4.4.jar、jackson-core-2.4.4.jar、jackson-databind-2.4.4.jar。
spring mvc4.1.4使用了jackson2来处理JSON,jackson2的jar包为以上三个,导入之后问题解决。
1.问题现象Tomcat7+Spring4.1.4,返回json字符串时发生406错误
The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.
message
description The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.
[java]
view plaincopyprint?
@RequestMapping("/listAll")
@ResponseBody
public Map<String, Object> listAll() {
List<Device> list = deviceService.listAll();
if (list != null) {
Map<String, Object> result = new HashMap<String, Object>();
result.put("total", list.size());
result.put("rows", list);
return result;
}
return null;
}
3.网上调查
按照问题现象在网上搜了一下类似问题不少,代表性的有以下几篇:
The resource identified by this request is only capable of generating responses with characteristics
Spring MVC + JSON = 406 Not Acceptable
Spring 3 MVC And JSON Example
前两篇无法解决问题,将第三篇的例子下载下来,运行,成功返回json数据
4.定位
因为例子中用了spring3.2,所以怀疑是spring版本问题。对Spring版本进行替换测试,降到4.0.9时,成功返回json字符串。
5.查找根源
下载4.0.9和4.1.0的spring-webmvc源代码进行对比。
看到在json处理时稍有不同。
4.0.9使用了网上所说的:
[html]
view plaincopyprint?
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.10</version>
</dependency>
\spring-webmvc-4.0.9.RELEASE-sources\org\springframework\web\servlet\view\json\MappingJacksonJsonView.java
[java]
view plaincopyprint?
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
而4.1.0开始,使用了:
[html]
view plaincopyprint?
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>
spring-webmvc-4.1.0.RELEASE-sources\org\springframework\web\servlet\view\json\AbstractJackson2View.java
[java]
view plaincopyprint?
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
6.解决问题
引入fasterxml的jar包,改回spring4.1.4,问题解决。
7.后记:就在要发表文章的时候,在下方预览中看到一篇
Spring MVC 4.1.4 RESTFUL风格返回JSON数据406错误处理
为什么不让我早点看到。。。
解决办法,导入jackson2.X的jar包:
jackson-annotations-2.4.4.jar、jackson-core-2.4.4.jar、jackson-databind-2.4.4.jar。
spring mvc4.1.4使用了jackson2来处理JSON,jackson2的jar包为以上三个,导入之后问题解决。
1.问题现象Tomcat7+Spring4.1.4,返回json字符串时发生406错误
The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.
HTTP Status 406 -
type Status reportmessage
description The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.
Apache Tomcat/7.0.52
2.具体实现[java]
view plaincopyprint?
@RequestMapping("/listAll")
@ResponseBody
public Map<String, Object> listAll() {
List<Device> list = deviceService.listAll();
if (list != null) {
Map<String, Object> result = new HashMap<String, Object>();
result.put("total", list.size());
result.put("rows", list);
return result;
}
return null;
}
3.网上调查
按照问题现象在网上搜了一下类似问题不少,代表性的有以下几篇:
The resource identified by this request is only capable of generating responses with characteristics
Spring MVC + JSON = 406 Not Acceptable
Spring 3 MVC And JSON Example
前两篇无法解决问题,将第三篇的例子下载下来,运行,成功返回json数据
4.定位
因为例子中用了spring3.2,所以怀疑是spring版本问题。对Spring版本进行替换测试,降到4.0.9时,成功返回json字符串。
5.查找根源
下载4.0.9和4.1.0的spring-webmvc源代码进行对比。
看到在json处理时稍有不同。
4.0.9使用了网上所说的:
[html]
view plaincopyprint?
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.10</version>
</dependency>
\spring-webmvc-4.0.9.RELEASE-sources\org\springframework\web\servlet\view\json\MappingJacksonJsonView.java
[java]
view plaincopyprint?
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
而4.1.0开始,使用了:
[html]
view plaincopyprint?
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>
spring-webmvc-4.1.0.RELEASE-sources\org\springframework\web\servlet\view\json\AbstractJackson2View.java
[java]
view plaincopyprint?
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
6.解决问题
引入fasterxml的jar包,改回spring4.1.4,问题解决。
7.后记:就在要发表文章的时候,在下方预览中看到一篇
Spring MVC 4.1.4 RESTFUL风格返回JSON数据406错误处理
为什么不让我早点看到。。。
相关文章推荐
- JAVA多线程读写文件范例
- 基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
- javaweb通过SMS短信通API实现短信发送功能
- Java的内存机制
- java导出Excel
- 解决 eclipse 新建 maven 后无法显示 src/main/java 和 src/main/test
- 决策树算法---java
- 【j2ee spring】46、巴巴运动网——购物车
- LeetCode java实现Add Two Numbers
- Java Timer的使用(timer.schedule定时执行)
- 对JAVA的一些个人总结——面向对象
- java错误篇一
- 朴素贝叶斯分类算法-----java
- springmvc笔记
- Spring Resource
- Spring 事务管理原理探究
- spring配置和dubbo
- Java基础总结(二)
- java对象转为json数据在前台展示
- java数据类型讲解