/** 初始化RestTemplate,RestTemplate会默认添加HttpMessageConverter* 添加的StringHttpMessageConverter非UTF-8 所以先要移除原有的StringHttpMessageConverter,* 再添加一个字符集为UTF-8的StringHttpMessageConvert*/private void reInitMessageConverter(RestTemplate restTemplate) {List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();HttpMessageConverter<?> converterTarget = null;for (HttpMessageConverter<?> item : converterList) {if (item.getClass() == StringHttpMessageConverter.class) {converterTarget = item;break;}}if (converterTarget != null) {converterList.remove(converterTarget);}HttpMessageConverter<?> converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);converterList.add(converter);}

RestTemplate 中文乱码解决方法

时间 2016-02-01 08:58:22  IT社区推荐资讯
原文  http://itindex.net/detail/55150-resttemplate-中文乱码-方法
主题 JAXB

标签: resttemplate 中文乱码 方法 | 发表时间:2016-02-01 15: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;  }

转载于:https://www.cnblogs.com/wangyang108/p/5754186.html

spring resttemplate中的转码相关推荐

  1. Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求

    Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939 版权声明:本 ...

  2. Spring RestTemplate中几种常见的请求方式

    关注公众号[江南一点雨],专注于 Spring Boot+微服务以及前后端分离等全栈技术,定期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货! 在Spring Cloud ...

  3. Spring-Web(一) RestTemplate使用与源码浅析

    Spring RestTemplate使用与源码浅析 一.RestTemplate 概述 ​ RestTemplate 是 Spring Web 模块封装的一个基于Rest规范提供HTTP请求服务的工 ...

  4. Spring Cloud中Hystrix仪表盘与Turbine集群监控

    Hystrix仪表盘,就像汽车的仪表盘实时显示汽车的各项数据一样,Hystrix仪表盘主要用来监控Hystrix的实时运行状态,通过它我们可以看到Hystrix的各项指标信息,从而快速发现系统中存在的 ...

  5. Spring Cloud中Hystrix的请求合并

    在微服务架构中,我们将一个项目拆分成很多个独立的模块,这些独立的模块通过远程调用来互相配合工作,但是,在高并发情况下,通信次数的增加会导致总的通信时间增加,同时,线程池的资源也是有限的,高并发环境会导 ...

  6. Spring Cloud中Hystrix仪表盘与Turbine集群监控 1

    Hystrix仪表盘,就像汽车的仪表盘实时显示汽车的各项数据一样,Hystrix仪表盘主要用来监控Hystrix的实时运行状态,通过它我们可以看到Hystrix的各项指标信息,从而快速发现系统中存在的 ...

  7. Spring容器中获取Bean实例的七种方式(附实战源码)

    目录 写作说明 一:写作原因 二:源码出处 实现方式 一:使用BeanFactory直接获取(不推荐) 二:在初始化时保存ApplicationContext对象 三:继承自抽象类Applicatio ...

  8. springsecurity sessionregistry session共享_要学就学透彻!Spring Security 中 CSRF 防御源码解析...

    今日干货 刚刚发表查看:66666回复:666 公众号后台回复 ssm,免费获取松哥纯手敲的 SSM 框架学习干货. 上篇文章松哥和大家聊了什么是 CSRF 攻击,以及 CSRF 攻击要如何防御.主要 ...

  9. Spring中AOP源码剖析

    Spring中AOP源码剖析 关键词 aop的增强发生在后置处理器中(没有循环依赖) 最终增强是通过 递归调用 ,层层增强 一.环境准备 1.1 bean和接口 public class AopBea ...

最新文章

  1. oracle do date,Oracle to_date函数的使用
  2. 刷爆技术圈的《知识图谱》终于补货了,最后 968 份,低至 2 折,抢完不补!...
  3. 百练-16年9月推免-B题-字符串判等
  4. 统计gitlab代码行脚本_一点也不复杂, GitLab Webhook 自动部署代码
  5. Angular Jasmine 里一些常用概念学习笔记 - describe, it, beforeEach的用法
  6. 【转】sql表及字段命名规范
  7. 检测输入路径是否存在错误_为什么存在用户输入错误
  8. linux系统使用小端内存,linux进程内存管理
  9. hnu 暑期实训之魔咒词典
  10. 腾讯火力全开“吃鸡”:下一个游戏行业风口怎能错过?
  11. html京东 重置代码,拟写京东登录界面(HTML - CSS)
  12. No module named ‘_ssl‘
  13. 【OCM第18期开班】第18期11g OCM培训将于8月23日,晚20点在腾讯课堂开班,第1场考试免费培训!!!...
  14. 正则表达式之密码验证
  15. 自媒体人如何定位?自媒体大号应该怎么去运营和发展
  16. Mac系统解决ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘方法
  17. Android轮播图原理思路分析+实现方案
  18. 139邮箱发送邮件(python web自动化)
  19. Butter Knife 黄油刀
  20. 5S软件就是将软件应用全维度简单化的软件系统

热门文章

  1. 2012r2配置java_JDK+Tomcat 服务器配置+腾讯云Win2012 R2 配置安装
  2. 【Spring】详解ContextLoaderListener和DispatcherServlet的区别
  3. 原生JS、jQuery 遍历方法总结
  4. 论文都看不懂,你还搞什么人工智能?
  5. 从零开始通过 Artifactory 搭建公网的 maven 仓库
  6. centos mysql 安装及配置
  7. HtmlDom 基础
  8. org.apache.commons.lang.StringUtils(StringUtils工具类的常用方法)
  9. 华为路由器防火墙配置命令总结(上)
  10. 6.5版本虚拟机的封装