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

 更新时间:2021年08月03日 09:24:32   作者:熊熊爱绵羊  
这篇文章主要介绍了解决RestTemplate 的getForEntity调用接口乱码的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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中动态代理和反射机制

    实例讲解Java中动态代理和反射机制

    在本篇文章里小编给各位分享了关于Java中动态代理和反射机制的相关知识点内容,有需要的朋友们学习下。
    2019-01-01
  • IDEA2023.3.4开启SpringBoot项目的热部署(图文)

    IDEA2023.3.4开启SpringBoot项目的热部署(图文)

    本文使用的开发工具是idea,使用的是springboot框架开发的项目,配置热部署,可以提高开发效率,文中通过图文介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • spring boot 配置动态刷新详解

    spring boot 配置动态刷新详解

    这篇文章主要介绍了spring boot 配置动态刷新实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • 浅析Java的Hibernate框架中的继承关系设计

    浅析Java的Hibernate框架中的继承关系设计

    这篇文章主要介绍了Java的Hibernate框架中的继承关系设计,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • Spring五大类注解读取存储Bean对象的方法

    Spring五大类注解读取存储Bean对象的方法

    这篇文章主要介绍了Spring五大类注解读取存储Bean对象,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • jasypt SaltGenerator接口定义方法源码解读

    jasypt SaltGenerator接口定义方法源码解读

    这篇文章主要为大家介绍了jasypt SaltGenerator接口定义方法源码解读,,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • SpringBoot中配置多数据源的方法详解

    SpringBoot中配置多数据源的方法详解

    这篇文章主要为大家详细介绍了SpringBoot中配置多数据源的方法的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • Java实现字符串倒序输出的四种方法汇总

    Java实现字符串倒序输出的四种方法汇总

    这篇文章主要介绍了Java实现字符串倒序输出的四种方法汇总,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • IDEA高效使用设置指南

    IDEA高效使用设置指南

    本文主要为大家介绍了关于IDEA高效的设置指南,其中包含必备的一些插件推荐以及主题优化还有IDEA源码的阅读技巧,干货满满,有需要的朋友可以借鉴参考下
    2022-01-01
  • java如何创建一个jdbc程序详解

    java如何创建一个jdbc程序详解

    使用Java程序来操作数据库,后者更加直接的话就是使用Java程序来发送SQL语句的技术称之为:JDBC。下面这篇文章主要给大家介绍了关于利用java如何创建一个jdbc程序的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-11-11

最新评论