有時候,當我們在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 調用天氣預報接口亂碼的解決