RestTemplate 的getForEntity調用接口亂碼的一種解決方式

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章