RestTemplate 中文乱码解决方法

标签: resttemplate 中文乱码 方法 | 发表时间:2016-02-01 23:51 | 作者:yangzelin_job09
出处:http://www.iteye.com
Spring4.2.2.RELEASE   RestTemplate 中文乱码解决方法
       
       RestTempalate 字符串类型默认StringHttpMessageConverter做转码,而StringHttpMessageConverter的默认编码集是ISO8859-1,本工程编码是UTF-8 故发送到服务器端会存在中文乱码
  解决方法有两种:

  第一种:把restTempalate 中  StringHttpMessageConverter 默认编码设置为UTF-8
  具体:使用 restTempalate 构造函数 public RestTemplate(List<HttpMessageConverter<?>> messageConverters) 传入 StringHttpMessageConverter 默认编码集是UTF-8 的转换器
  在 配置文件中配置:
  
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
	     	<constructor-arg index="0">
	     		<list>
	     			<bean id="byteArrayHttpMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
	     			<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
	     				<constructor-arg value="UTF-8"></constructor-arg>
	     			</bean>
	     			<bean id="resourceHttpMessageConverter" class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
	     			<bean id="sourceHttpMessageConverter" class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
	     			<bean id="allEncompassingFormHttpMessageConverter" class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"></bean>
	     			<bean id="jaxb2RootElementHttpMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
	     			<bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
	     		</list>
	     	</constructor-arg>
	 	</bean>

  
  
第二种:使用 设置Http请求头中设置 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 修改默认编码
 
HttpHeaders headers = new HttpHeaders();
		MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded; charset=UTF-8");
		headers.setContentType(type);
		System.out.println(type);
		HttpEntity<String> requestEntity = new HttpEntity<String>(PostStrUtils.getPostStrFromMap(paramMap),  headers);
		
		String msg = restTemplate.postForObject(url,requestEntity, String.class);

		






public String sendToRest(String url, Map<String, String> paramMap) {
		logger.debug("====================start======================");
		logger.debug("调用接口-" + restUrl + url + " 入参:" + paramMap);


		/**
		 * restTempalate 字符串类型默认StringHttpMessageConverter做转码,而StringHttpMessageConverter的默认编码集是ISO8859-1,本工程编码是UTF-8 故发送到服务器端会存在中文乱码
		 * 解决方法有两种:
		 * 第一种:把restTempalate 中  StringHttpMessageConverter 默认编码设置为UTF-8 
		 * 具体:使用 restTempalate 构造函数 public RestTemplate(List<HttpMessageConverter<?>> messageConverters) 传入 StringHttpMessageConverter 默认编码集是UTF-8 的转换器
		 * 在 配置文件中配置:
		 *  <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
		 *    	<constructor-arg index="0">
		 *    		<list>
		 *    			<bean id="byteArrayHttpMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
		 *    			<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
		 *    				<constructor-arg value="UTF-8"></constructor-arg>
		 *    			</bean>
		 *    			<bean id="resourceHttpMessageConverter" class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
		 *    			<bean id="sourceHttpMessageConverter" class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
		 *    			<bean id="allEncompassingFormHttpMessageConverter" class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"></bean>
		 *    			<bean id="jaxb2RootElementHttpMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
		 *    			<bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
		 *    		</list>
		 *    	</constructor-arg>
		 *	</bean>
		 *  
		 *  
		 * 第二种:使用 设置Http请求头中设置 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 修改默认编码
		 * 
		 */
		
		//存在中文乱问题
//		String msg = restTemplate.postForObject(restUrl + url,
//				PostStrUtils.getPostStrFromMap(paramMap), String.class);
		
		//
		HttpHeaders headers = new HttpHeaders();
		MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded; charset=UTF-8");
		headers.setContentType(type);
		System.out.println(type);
		HttpEntity<String> requestEntity = new HttpEntity<String>(PostStrUtils.getPostStrFromMap(paramMap),  headers);
		
		String msg = restTemplate.postForObject(url,requestEntity, String.class);

		logger.debug("调用接口-" + restUrl + url + " 返回:" + msg);
		logger.debug("====================end========================");

		return msg;
	}




已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [resttemplate 中文乱码 方法] 推荐:

RestTemplate 中文乱码解决方法

- - 企业架构 - ITeye博客
Spring4.2.2.RELEASE   RestTemplate 中文乱码解决方法.        RestTempalate 字符串类型默认StringHttpMessageConverter做转码,而StringHttpMessageConverter的默认编码集是ISO8859-1,本工程编码是UTF-8 故发送到服务器端会存在中文乱码.

Spring restTemplate - osc_r2doglc9的个人空间 - OSCHINA

- -
什么是RestTemplate. RestTemplate是Spring提供的用于访问Rest服务的客户端,提供了多种便捷访问远程HTTP服务的方法,能够大大提高客户端的编写效率. 项目中注入RestTemplate. .

webview中文乱码及cookie的设置

- - IT瘾-geek
这里主要记录关于 WebView加载含中文的 url和 cookie中设置中文显示乱码的解决方法. 目前,在android 开发中,为了方便程序进行扩展,很多 APP中都采用了 WebView来加载 H5 页面,这样通过后台更换一个H5地址,程序中就有相应的变化,不用重新打包发布. 我参与的项目中,使用 WebView的场景主要有下面几种:商城类APP中的商品详情、签到、帮助中心、积分抽奖、邀请好友,banner详情等.

MAC OS上解决终端显示中文乱码的问题

- - CSDN博客编程语言推荐文章
在终端上运行命令javac,查看结果中文会显示乱码,如下:. 其实大家都知道,中文乱码的主要原因就是编码方式的不支持,那我们怎么样设置编码方式呢. 这里推荐您使用一个特别好的终端iTerm,默认编码方式是utf-8,需要设置为Chinese (GB 18030). 之后重新打开iTerm,输入javac,查看结果.

Java进程在Unix平台上中文乱码问题

- - BlogJava_首页
用Log4j记录的日志中,中文也是. ,这个问题很让人心烦,当然以我的运气,这种问题是一定会遇到的,现在记录一下解决方法.     因为每一个应用都会启动一个Java进程,启动方法就是 java $OPTS com.xxx.xxx.xxx.     其中变量$OPTS就是我们要设置的JVM的启动参数.

locale错误导致Java中文乱码错误的总结

- - Java - 编程语言 - ITeye博客
线上执行MapReduce任务计算时,经过排查发现了某些服务器计算的数据出现中文乱码问题,但是服务器的配置是完全一致的. 由于我们使用的key可能包含中文,中文乱码问题体现在每次合并map记录的时候计算数据的随机性,每次执行的结果都不一样(由于Map任务执分配的随机性). (注:此文章大部分都参考了同事查找到的问题解决方法.

(原创)Linux下MySQL 5.5的修改字符集编码为UTF8(彻底解决中文乱码问题)

- - 服务器运维与网站架构|Linux运维|X研究
PS:昨天一同事遇到mysql 5.5中文乱码问题,找我解决. 解决了,有个细节问题网上没人说,我就总结一下. 一、登录MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,显示如下:. character_set_database和character_set_server的默认字符集还是latin1.

mysql保存中文乱码的原因和解决办法(首发经典实用版)

- - CSDN博客推荐文章
    当你遇到这个mysql保存中文乱码问题的时候,期待找到mysql保存中文乱码的原因和解决办法(首发经典实用版)这样一篇能解决问题的文章是多么激动人心.     也许30%的程序员会选择自己百度,结果发现网友已经贴了很多类似“mysql 中文乱码”、“php mysql 中文乱码”、“mysql5.5中文乱码”、“mysql 乱码”、“mysql乱码问题”、“mysql jsp 乱码”、“mysql jdbc 乱码”、“mysql 查询乱码”、“mysql 导入数据乱码”等一系列问题,到底哪个是自己要找的能解决自己问题的呀.

模板方法

- - 博客园_首页
由于前两天刚好用到模板方法这个模式,而且这个模式相对来 比较简单实用,就写写个人的一些认知吧. 大家对宋丹丹和赵本山的小品里有一个很经典的台词一定不会陌生,而且还日常中经常引用:. 《钟点工》中宋丹丹问要把大象装冰箱,总共分几步. 赵本山就懵了,大象那么大,冰箱那么小,怎么才能把大象装冰箱里呢. 答案也很经典:三步:第1步,把冰箱门打开;第2步,把大象装进去;第3步,把冰箱门带上.

详解 equals() 方法和 hashCode() 方法

- - ImportNew
Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码. equals()和hashCode()都不是final方法,都可以被重写(overwrite). 本文介绍了2种方法在使用和重写时,一些需要注意的问题. Object类中equals()方法实现如下:.