Spring WebMVC 4.1返回json时 406(Not Acceptable)
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 report
message
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.具体实现
- @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
前两篇无法解决问题,将第三篇的例子下载下来,运行,成功返回json数据
4.定位
因为例子中用了spring3.2,所以怀疑是spring版本问题。对Spring版本进行替换测试,降到4.0.9时,成功返回json字符串。
5.查找根源
下载4.0.9和4.1.0的spring-webmvc源代码进行对比。
看到在json处理时稍有不同。
4.0.9使用了网上所说的:
- <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
- 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开始,使用了:
- <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
- 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.后记:就在要发表文章的时候,在下方预览中看到一篇
今天在使用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包为以上三个,导入之后问题解决。
Spring WebMVC 4.1返回json时 406(Not Acceptable)的更多相关文章
- Spring MVC Rest服务 返回json报406错误的解决办法
@ResponseBody & @RequestBody @RequestBody 将 HTTP 请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象. ...
- Spring MVC使用@ResponseBody返回JSON数据406以及乱码问题解决方案
刚到一家公司,做原始的工作---接口,程序就我一人,没环境,没架构,更没旧项目可以利用,一切从0开始,经理以为我是老鸟,来就布置任务,要一周拿出结果.其实有现成架构的话写个接口还不是分分钟钟的事,关键 ...
- Spring MVC 4.1.4 RESTFUL风格返回JSON数据406错误处理
Spring MVC 4.1.4 RESTFUL风格返回JSON数据406错误处理 今天在使用spring4.1.4,使用ResponseBody注解返回JSON格式的数据的时候遇到406错误. 解决 ...
- Spring MVC 3.0 返回JSON数据的方法
Spring MVC 3.0 返回JSON数据的方法1. 直接 PrintWriter 输出2. 使用 JSP 视图3. 使用Spring内置的支持// Spring MVC 配置<bean c ...
- ajax返回json时,js获取类型,是字符串类型
ajax向php服务端请求,并返回json串给前端. js发现得到的返回值的类型是字符串,不能直接取json对象属性,需要JSON.parse(). 怎么解决呢? 这需要在php返回json时,加上一 ...
- 在mvc返回JSON时出错:序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用 的解决办法
在MVC中返回JSON时出错,序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用. public ActionResul ...
- spring boot 解决后台返回 json 到前台中文乱码之后出现返回json数据报错 500:no convertter for return value of type
问题描述 spring Boot 中文返回给浏览器乱码 解析成问号?? fastJson jackJson spring boot 新增配置解决后台返回 json 到前台中文乱码之后,出现返回json ...
- springMvc中406错误解决,springMvc使用json出现406 (Not Acceptable)
springMvc中406错误解决, springMvc使用json出现406 (Not Acceptable) >>>>>>>>>>> ...
- Spring MVC控制器用@ResponseBody声明返回json数据报406的问题
本打算今天早点下班,结果下午测试调试程序发现一个问题纠结到晚上才解决,现在写一篇博客来总结下. 是这样的,本人在Spring mvc控制层用到了@ResponseBody标注,以便返回的数据为json ...
随机推荐
- 杂项-分布式-EDAS:深度解析阿里云EDAS服务
ylbtech-杂项-分布式-EDAS:深度解析阿里云EDAS服务 1.返回顶部 1. 深度解析阿里云EDAS服务 弹性伸缩 摘要: 第一种只适用于业务较少的情况,而在新业务不断增加的情况下,增加新应 ...
- Linux期中架构 全网备份案例
server端脚本 #!/bin/bash #1 进行数据完整性验证 并生成结果 find /backup -type f -name "finger.txt"| xargs md ...
- 使用XML-RPC进行远程文件共享
这是个不错的练习,使用python开发P2P程序,或许通过这个我们可以自己搞出来一个P2P下载工具,类似于迅雷.XML-RPC是一个远程过程调用(remote procedure call,RPC)的 ...
- securecrt8注册码
securecrt8注册码,两个可用 Name:meisiCompany:TEAM ZWTSerial Number:03-14-367662License Key:ACCFAX R9FHJ7 QZV ...
- ORM 框架简介
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应 ...
- 查看虚拟机CENTOS7 的 IP 地址和命令
用于生产环境下 安装CENTOS7 太费时间, 研究阶段 放在虚拟机里面 是最好的选择: 但是安装完毕后 就出现问题 无法使用IFCONFIG : 毕竟 内核不一样 首先我们登录操作系统 用 ...
- python入门-变量和简单数据类型
1 title() 是以首字母大写的方式显示每个单词 lower() 字母小写 upper() 字母大写 2 python使用+号来合并字符串 字符串中使用制表符用\t 字符串中使用换行符\n 用rs ...
- 0_Simple__simpleCooperativeGroups
▶ 协作组,CUDA9.0 的新特性 ▶ 源代码,如何获得协作组的编号? #include <stdio.h> #include "cuda_runtime.h" #i ...
- spring中 的MD5 加密
//对密码进行加密(不需要使用其他Md5工具 .spring中有 在digestUtils) String password = DigestUtils.md5DigestAsHex( ...
- 解决报错 Page directive: illegal to have multiple occurrences of contentType with different values (old:
转自:https://blog.csdn.net/dorothy1224/article/details/78064288