欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-13 19:05:06
...

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

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

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

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

  •  引入pom坐标:
<dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpclient</artifactId>
   <version>4.5.3</version>
</dependency>

 

  • 修改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 调用天气预报接口乱码的解决