欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

解决RestTemplate 的getForEntity调用接口乱码的问题

时间:2022-01-17 10:49:42|栏目:JAVA代码|点击:

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调用接口,发现数据已经正常了。

RestTemplate返回值乱码解决

一、在调用RestTemplate

的getForEntity(String url, Class responseType, Object… uriVariables)的接口时,返回中文字是乱码的

二、我们来分析下原因:

1、查看RestTemplate的源码发现

在这里插入图片描述

2、在构造函数中,看到红色圈出来的代码了吗,继续点击进去。

3、StringHttpMessageConvert这个类中的设置的编码格式为GBK的编码格式,即图中的ISO-8859-1

三、接下来我们改写代码

在自己代码里面获取RestTemplate对象之后,加上一段代码:

为了大家可以复制,我把代码粘贴出来了,如下所示:

     RestTemplate restTemplate = new RestTemplate();
        List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters();
        httpMessageConverters.stream().forEach(httpMessageConverter -> {
            if(httpMessageConverter instanceof StringHttpMessageConverter){
                StringHttpMessageConverter messageConverter = (StringHttpMessageConverter) httpMessageConverter;
                messageConverter.setDefaultCharset(Charset.forName("UTF-8"));
            }
        });
        //发送请求
        String jsonStr = restTemplate.getForEntity(url, String.class).getBody();

上一篇:Java如何生成带网站链接(URL)的二维码

栏    目:JAVA代码

下一篇:谈谈变量命名规范的重要性

本文标题:解决RestTemplate 的getForEntity调用接口乱码的问题

本文地址:http://www.codeinn.net/misctech/190506.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有