RestTemplate 的getForEntity调用接口乱码的一种解决方式
程序员文章站
2022-06-13 19:05:06
...
有时候,当我们在SpringBoot项目中使用restTemplate去调用第三方接口时,会发现返回的body中出现了乱码,百度一搜,基本都说是需要将restTemplate中的消息转换器中的StringHttpMessageConverter的字符编码由iso8859-1改为utf-8 ,但是发现并不管用,那么还有一种可能是第三方接口的数据经过GZIP压缩过,
默认情况下,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 调用天气预报接口乱码的解决
上一篇: Maven打包编译出错