RestTemplate获取网页内容中文乱码问题

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;
}

再次运行问题解决! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岳有才

希望能帮到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值