问题
使用RestTemplate
访问如下接口:
发现响应body为乱码。
请求代码
String url = "http://wthrcdn.etouch.cn/weather_mini?city={city}";
Map<String, String> paramMap = new HashMap<>();
paramMap.put("city", "北京");
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class, paramMap);
String body = responseEntity.getBody();
body乱码
解决
通过查看Header信息发现,该返回结果是gzip压缩过的,因此需要为RestTemplate
添加gzip支持。
关于添加gzip的方法即使用apache的HttpClient
替换默认客户端实现。
- pom.xml添加HttpClient依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
- 创建RestTemplate
@Bean
public RestTemplate restTemplate() {
//使用HttpClient替换默认实现
HttpClient httpClient = HttpClientBuilder.create().build();
ClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
//解决中文乱码
restTemplate.getMessageConverters()
.set(1, new StringHttpMessageConverter(Charsets.UTF_8));
return restTemplate;
}
网友评论