RestTemplate踩坑笔记-中文乱码与json被解析成xml

1.RestTemplate访问Restfull接口:中文乱码+返回数据格式为xml

Spring Cloud项目,肯定会用到组件之间的Http通信,我使用的是spring提供的简单便捷的模板类:RestTemplate。

Restfull接口如下:

Resufull接口,分页查询登录日志

请求:restTemplate.getForEntity(routerUrl,String.class,map);

RestTemplate请求

返回200,这个没问题,重点是:访问Restfull接口竟然返回的是XML格式的数据!!!而且中文还是乱码。

2.解决中文乱码

其实对于中文乱码的问题我倒是预料到了,在restTemplate的MessageConverters集合里加入StringHttpMessageConverter就可以了,代码如下

RestTemplate restTemplate =new RestTemplate();

restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));

乱码问题解决

3.解决返回XML问题

这个问题比较怪异,我的项目中有五个组件,都是Restfull接口,但访问一部分组件返回的是正常的json,一部分组件返回的是xml。分别对每个组件使用postman直接访问,返回的都是正常的json。那么不出意外,应该就是RestTemplate在捣鬼了。

二话不说,直接扒源码,发现了一个可疑的家伙:jackson2XmlPresent,如图:

原来在RestTemplate的messageConverters中有这么多成员常驻着,别的我不管,这个jackson2XmlPresent可是要了命的鬼啊,虽然我没直接证据证明是它把我的json转成Xml,但看着它就来气,果断弄掉。

等等,我在项目中用到的是FastJson,RestTemplate的messageConverters里面没有FastJson,作为一个处女座程序员,怎么能容许你用jackson解析我的FastJson呢,果断干掉jackson,加入FastJson,代码如下:

RestTemplate restTemplate =new RestTemplate();

restTemplate.getMessageConverters().clear();

restTemplate.getMessageConverters().add(new FastJsonHttpMessageConverter());

干掉所有messageConverters,加入FastJsonHttpMessageConverter,由于FastJsonHttpMessageConverter默认字符集就是UTF8,因此,一行代码将中文乱码和json解析成xml的问题一并解决了,效果如下:


完美

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,188评论 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,794评论 1 92
  • 小猫的伤口的流血已经被止住,云青峰也用自己的功法帮助小猫愈合伤口。经过一番治疗,小猫已经觉不到痛苦了,猫懒惰的天性...
    御龙宸阅读 1,855评论 1 0
  • 由于考研以及办公室的每日相关事务处理,这次阅读完《GTD》这本书花费了约摸40天的时间,相比之前有了些许的进步,读...
    兰镜浮笙阅读 3,184评论 0 0
  • 最美不过瑞雪松
    涅槃之后阅读 1,144评论 0 0

友情链接更多精彩内容