文档章节

Spring Mvc中@ResponseBody中文乱码解决

f
 freeonsky
发布于 2016/05/24 01:58
字数 363
阅读 39
收藏 0

#Spring Mvc中@ResponseBody中文乱码解决

##在网上看到一种方式(方式一):

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
	<property name="messageConverters">  
		<list>  
			<bean  
				class="org.springframework.http.converter.StringHttpMessageConverter">  
				<property name="supportedMediaTypes">  
					<list>  
						<bean class="org.springframework.http.MediaType">  
							<constructor-arg index="0" value="text" />  
							<constructor-arg index="1" value="plain" />  
							<constructor-arg index="2" value="UTF-8" />  
						</bean>  
					</list>  
				</property>  
			</bean>  
		</list>  
	</property>  
</bean>

这种方式对于返回值为String类型的请求是对的

	@RequestMapping(value = "/str.cgi", produces = "application/json; charset=utf-8")
	public @ResponseBody String str() {
		return "hah你好";
	}

如果返回值是一个对象,就会报406错误

	@RequestMapping(value="/getUser.cgi")
	public @ResponseBody User getUser(@RequestParam("account") String account){
		User user = service.getUserByAccount(account);
		return user;
	}

原因是spring mvc注解配置 <mvc:annotation-driven /> 默认会初始化AnnotationMethodHanlderAdapter类,这个类默认会初始化7个Converter

  • ByteArrayHttpMessageConverter
  • StringHttpMessageConverter
  • ResourceHttpMessageConverter
  • SourceHttpMessageConverter<T>
  • XmlAwareFormHttpMessageConverter
  • Jaxb2RootElementHttpMessageConverter
  • MappingJacksonHttpMessageConverter

返回值为json对象时,需要 MappingJacksonHttpMessageConverter 来转换,但是由于方式一只配置了 StringHttpMessageConverter ,导致json无法解析。

解决方案,添加json对应的converter,或者自己定义一个能够转化json的converter

方式二

	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<ref bean="stringHttpMessageConverter" />
				<ref bean="jsonHttpMessageConverter" />
				<ref bean="marshallingHttpMessageConverter" />
			</list>
		</property>
	</bean>
	<bean id="stringHttpMessageConverter"
		class="org.springframework.http.converter.StringHttpMessageConverter" />
	<!-- 对于jackson2,要用MappingJackson2HttpMessageConverter -->
	<bean id="jsonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
	<!-- <bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" 
		/> -->
	<bean id="marshallingHttpMessageConverter"
		class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
		<constructor-arg ref="jaxbMarshaller" />
		<property name="supportedMediaTypes" value="application/xml"></property>
	</bean>
	<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
		<property name="classesToBeBound">
			<list>
				<value>com.open.efs.user.model.User</value>
			</list>
		</property>
	</bean>

注1:要使用Jaxb2Marshaller我们在对应的实体,比如User类上需要标明 @XmlRootElement 注解,需要引入 import javax.xml.bind.annotation.XmlRootElement; 这个包。 注2:方式二的代码放在<mvc:annotation-driven />前后都行

© 著作权归作者所有

f

freeonsky

粉丝 0
博文 1
码字总数 363
作品 0
西安
私信 提问
SpringMVC 返回中文字符串时乱码

SpringMVC的@ResponseBody注解可以将请求方法返回的对象直接转换成JSON对象,但是当返回值是String的时候,中文会乱码,原因是因为其中字符串转换和对象转换用的是两个转换器,而String的转换...

费氏家族
2017/10/30
40
0
解决SpringMVC的@ResponseBody返回中文乱码

SpringMVC的@ResponseBody返回中文乱码的原因是SpringMVC默认处理的字符集是ISO-8859-1,在Spring的org.springframework.http.converter.StringHttpMessageConverter类中可以看到如下代码: ...

爱笑的痴迷者
2016/09/21
39
0
【转】Ajax响应中文乱码 [SpringMVC使用@ResponseBody处理Ajax请求]

Spring3.0 MVC @ResponseBody 的作用是把返回值直接写到HTTP response body里。 Spring使用AnnotationMethodHandlerAdapter的handleResponseBody方法, AnnotationMethodHandlerAdapter使用r......

一堆BUG
2013/09/10
788
0
解决spring-mvc @responseBody注解返回json 乱码问题

在使用spring-mvc的mvc的时候既享受它带来的便捷,又头痛它的一些问题,比如经典的中文乱码问题。现在是用json作为客户端和服务端 的数据交换格式貌似很流行,但是在springmvc中有时候会因为...

刘志成
2013/11/15
30.4K
9
spring mvc @RequestBody接受post json对象

jq ajax通过post json对象 遇到的HTTP 415/400问题错误解决方案:http://www.linuxidc.com/Linux/2014-04/99928.htm 客户端: <html><head><meta http-equiv="Content-Type" content="text/......

Nob
2014/08/08
58.1K
3

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部