使用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一下就成自己的了,鄙视。