下载搜学网app
查学校 查学区 查辅导 查饭桌 查询中考数据
logo 点击咨询

SpringBoot中RestTemplate中文乱码问题的解决


使用SpringBoot开发了一款web应用,其中涉及到rest接口的访问,用户获取已经开通服务的地区列表。这个接口已经上线运行很久了,也有其他的客户端(包括winform、ios端)都在使用,返回的数据格式为text/plain;charset=utf-8;

本次使用RestTemplate进行接口访问,因为返回的数据中包含中文的区域名称,结果就出现了乱码了。使用过RestTemplate的都知道,其默认的编码格式为ISO-8859-1,中文是会显示乱码的,需要将默认的

StringHttpMessageConverter修改为utf-8,于是老衲就做了如下的定制:
public RestTemplate restTemplate(ClientHttpRequestFactory factory){ 
        RestTemplate restTemplate=new RestTemplate(factory);         
        restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));          
        return restTemplate;      
     }

跑起来一看,问题依旧,中文仍然是一堆的“?????”。

搜索出来的资料几乎都是这么处理的,咋就偏偏俺不行呢,想不通。

调试的时候,不然想起来前不久刚刚调试完成的另一个接口,也是有中文的,把当时的服务地址拿来一泡,中文能够正常显示。唯一的一点区别是,那个接口返回的数据格式:application/json;问题原来就出在这个地方。

看来是StringHttpMessageConverter挑食了!

于是做了如下的修改:


(i = i < restTemplate.getMessageConverters().size()i++) {

   (restTemplate.getMessageConverters().get(i) StringHttpMessageConverter){
      {
         ((StringHttpMessageConverter) restTemplate.getMessageConverters().get(i)).setSupportedMediaTypes(mediaTypeList);
         
         }(Exception e)         {
         e.printStackTrace()}
   }
}

在第一个处理器加上添加了mediaTypeList.add(MediaType.ALL);解析所有返回数据的格式。

问题解决了,上帝之问“????”消失了。

不得不慨叹一下,天下文章一大抄,好多帖子都是把别人的copy一下就成自己的了,鄙视。


评论