RestTemplate 的getForEntity调用接口乱码的一种解决方式

  有时候,当我们在SpringBoot项目中使用restTemplate去调用第三方接口时,会发现返回的body中出现了乱码,百度一搜,基本都说是需要将restTemplate中的消息转换器中的StringHttpMessageConverter的字符编码由iso8859-1改为utf-8 ,但是发现并不管用,那么还有一种可能是第三方接口的数据经过GZIP压缩过,

RestTemplate 的getForEntity调用接口乱码的一种解决方式_第1张图片

默认情况下,restTemplate使用的是JDK的HTTP调用器,并不支持GZIP解压,所以无法解析。

可以使用Apache 的HttpClient来解决,HttpClient其中内置了对于GZIP的支持,具体做法如下:

  •  引入pom坐标:

   org.apache.httpcomponents
   httpclient
   4.5.3

 

  • 修改restTemplate配置:
@Bean
public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory()); //Apache Httpclient
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        return restTemplate;
    }

 此时重新使用restTemplate调用接口,发现数据已经正常了。

附上原始博客地址: Spring RestTemplate 调用天气预报接口乱码的解决

你可能感兴趣的:(SpringBoot,SpringBoot相关知识)