springMVC浏览器接受json报406错误的解决方法

这个错误还真难搞,头一次遇见还真没有什么好办法解决,上网找了很多资料,一一试过也不能很好的解决,最后经过朋友,同事一起努力,终于征服了.留下笔记,供大家参考:

1.我后台测试代码如下:

@RequestMapping("/json")
	public @ResponseBody
	String json() {
		return "this is json";
	}

	@RequestMapping("/json2")
	public @ResponseBody
	List<User> json2() {
		List<User> users = new ArrayList<User>();
		User u = new User();
		u.setAccount("aa");
		users.add(u);
		return users;
	}

在浏览器访问这两个方法时,只有json正确,而json2就报406,说明spring没有处理好对象序列化成json的问题,最后我通过log4j打印的日志,也清晰的看到他返回的格式并非json格式.

既然格式错误了,浏览器当然接受不了数据,原因就在此了

2.知道了原因,于是就上网搜了.网上有人说mvc的xml没有加这个配置

<!-- 开启注解 -->
<mvc:annotation-driven />

但是我项目早就有了,固然不是问题答案

另外一种是说要配置json模板,觉得这个靠谱,于是乎就学着配置.....终于掉进坑里了

        <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
	<bean id="mappingJacksonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
			</list>
		</property>
	</bean>

	<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->
			</list>
		</property>
	</bean>

于是配置了一下,启动项目就报错了,缺包缘故,于是上网找jar包,这又遇到版本问题这个还真不容易,晚上资料却没说版本不同要找不到jar

这里我特意说明下

spring 4.0或一下的,一般都找jackson 1.x的版本

spring 4.1或以上的.就要找jackson2.x以上了

我的项目引用的就是spring 4.1.2的版本,一开始不清楚状况,盲目按网上的人配置,引用jackson版本比较低,到头来问题没解决,还引来一堆别的问题,头痛的要死,死去活来.....

哎......不堪回头...好吧,回归主题

以下是spring 4.1.2版本的正确配置

<----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->

4.1.2的

<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
	<bean id="mappingJacksonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
			</list>
		</property>
	</bean>

	<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->
			</list>
		</property>
	</bean>

引入三个jackson2.4版本

如下:

jackson-core-2.4.1.jar

jackson-annotations-2.4.1.jar

jackson-databind-2.4.1.jar

问题就解决了,不在报406了,json数据出来了

三个jar我上传,供大家下载~

地址:http://download.csdn.net/detail/qq183293/8378947

谢谢大家的支持~

时间: 2024-09-28 19:54:39

springMVC浏览器接受json报406错误的解决方法的相关文章

spring mvc 4.1 返回json报406错误的解决办法

浏览器访问,报 The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers. 解决办法,检查springmvc的配置文件中有无 <mvc:annotation-driven />

SpringMVC的AJAX请求报406错误

SpringMVC的AJAX请求报406错误原因有两种:1.jackson包没有引入 2.如果已经引入jackson包了还报406的错误,那么就有可能是请求的url路径是.html结尾,但是返回的数据是一个对象,这时浏览器就不知道怎么响应了,因为一般请求.html后缀的页面,返回的一般是个字符串或者页面内容,此时可以在web.xml中再配置一个拦截后缀,如*.action,web.xml可以有多个拦截后缀,请求.action的后缀,浏览器就没有这个限制了

Adobe Dreamweaver CC MySQL连接 报404错误的解决方法

Adobe Dreamweaver CC MySQL连接时总报404报错,并给以下两个提示: 1) 在该服务器机器上没有测试服务器运行. 2) 为该站点指定的测试服务器没有映射到http://localhost/_mmServerScripts/MMHTTPDB.phpURL.请确认url前缀映射到了你站点的根上. 网上翻了一堆网站,折腾了两三天,发现可以按如下方法解决: 1)首先要在http://localhost/security/index.php配置mysql的访问密码(我用的是XAMP

seafile看不见repo报500错误的解决方法

环境 seafile-server-6.2.5 centos7.5 1804 现象 seafile服务器所在的VPS没动过,前一天seafile用还好好的,昨天客户端突然不能登录了,显示"服务器内部错误":网页版可以登录,但看不见仓库,显示为红色Error字. 重启服务重启系统都无效,就需要慢慢排查问题了. F12可见好多红色失败请求 登录VPS看日志,根据我的配置, lnmp日志在/home/wwwlogs/目录下 seafile日志在/sharefiles/logs/目录下 都看看

virtualbox虚拟机中mysql远程连接登陆报2003错误的解决方法

最近在virtualbox中安装了Ubuntu 14,配置了一个mysql server,设置的桥接网络模式.在其他电脑连接的时候,总是报2003错误.开始以为是localhost没有置换为%,运行update语句将其置换,依然不行.后来发现是因为mysql的默认配置文件/etc/mysql/my.cnf 中有一行: bind-address            = 127.0.0.1 就是说,默认绑定了ip,只限本机访问.将本行加#注释掉,远程访问正常.

通过ADB安装apk到genymotion报[INSTALL_FAILED_CPU_ABI_INCOMPATIBLE]错误的解决方法

背景描述:使用genymotion一直是在安装是从开发那里拿来的APK,没有发生问题.今天在应用市场下载了一个竞品apk,使用同样的方式安装,报了[INSTALL_FAILED_CPU_ABI_INCOMPATIBLE]错误,见下图. 通过网上查找,发现这是因为系统里缺少了 Google Play 市场等各种谷歌服务应用,其实是因为版权问题,从 2.0 版本开始 Genymotion  提供的虚拟设备都已经移除了 Google Apps  以及 ARM library support ,所以,如

springmvc @ResponseBody返回json 报406 not acceptable

今天在做springmvc的@ResponseBody返回json的例子时,碰到了这样一个问题"406 (Not Acceptable)",百度之后发现在缺了一个依赖包jackson-databind. 1.spring-mvc.xml配置文件 2.pom.xml文件 [email protected]代码

cocoapods setup报路径错误, 解决方法

pod setup命令报错如下图: 说明是路径错误,在命令行输入一下命令即可解决. sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer 解决后,可继续执行安装操作.

maven的pom报plugins错误的解决方法.

报错的一小段内容: Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:jar:2.18. 碰到一个类似以上的错误.原因是maven的plugin并未下载到本地. 如果查看本地仓库的maven-surefire-plugin目录 D:\soft\mavenRepository\org\apache\maven\plugins\maven-surefire-plugin\2.18.1 会发现里面只有一个 maven-