1.认识RestTemplate?
本人做后台开发,一般会用postman和swagger-ui来测试数据,其实这两个都属于http客户端的一种。RestTemplate是Spring提供的用于访问RESTful服务的客户端,RestTemplate提供了多种便捷访问远程Http服务 的方法,能够大大提高客户端的编写效率。RestTemplate默认依赖JDK提供http连接的能力。
2.发现问题
在test下创建测试程序如下:
使用RestTemplate获取百度的网页内容:
@Autowired
RestTemplate restTemplate;
@Test
public void getThml(){
ResponseEntity<String> forEntity = restTemplate.getForEntity("https://baidu.com", String.class);
String body = forEntity.getBody();
log.info("获取网页内容:【{}】",body);
}
可以获取网页内容,只不过会出现乱码问题
3.解决问题
获取网页内容的原因是RestTemplate默认使用String存储body内容时默认使用ISO_8859_1字符集
解决方案:
配置StringHttpMessageConverter 消息转换器,使用utf-8字符集。
修改RestTemplate的定义方法
@Bean
public RestTemplate restTemplate() {
//切换RestTemplate底层调用为OkHttp,因为OkHttp的性能比较优越
RestTemplate restTemplate = new RestTemplate(new OkHttp3ClientHttpRequestFactory());
//配置消息转换器,处理所有响应乱码
List<HttpMessageConverter<?>> httpMessageConverter = restTemplate.getMessageConverters();
//设置编码
httpMessageConverter.set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
restTemplate.setMessageConverters(httpMessageConverter);
return restTemplate;
}
再次运行问题解决!