背景:使用RestTemplate 調用接口返回結果亂碼,但在瀏覽器中或者POSTMAN中調用時返回結果非亂碼;
在解決問題過程中,設置請求各種編碼等均未生效;在仔細觀察http請求時發現
原來,數據是經過 GZIP 壓縮過的。默認情況下, RestTemplate 使用的是 JDK 的 HTTP 調用器,並不支持 GZIP 解壓;
解決方法:
使用 Apache HttpClient 作爲 REST 客戶端。Apache HttpClient 內置了對於 GZIP 的支持
@Configuration
public class RestConfiguration {
@Bean
public RestTemplate httpClientRestemplate() {
RestTemplate restTemplate = new RestTemplate(
new HttpComponentsClientHttpRequestFactory()); // 使用HttpClient,支持GZIP
restTemplate.getMessageConverters().set(1,
new StringHttpMessageConverter(StandardCharsets.UTF_8)); // 支持中文編碼
return restTemplate;
}
}
業務代碼引入後,正常調用接口即可