RestTemplate返回值中文乱码问题

 更新时间:2024年04月19日 15:46:27   作者:偷代码的猫  
这篇文章主要介绍了RestTemplate返回值中文乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、问题描述

使用RestTemplate发送请求,返回值中文乱码

RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);

二、代码追踪

DEBUG过程中即时查询返回值是在哪里调度的,数值的改变是在哪里触发的

1、追踪getForEntity方法,发现execute方法

2、追踪execute方法,发现doExecute方法

3、追踪doExecute方法,发现extractData方法

4、发现有多个接口实现,debug跳转定位是哪个方法,好了,终于发现messageBody解析了

  • 通过上述代码我们可以简单判断,RestTemplate的消息响应应该是由messageConverters控制的
  • 所以我们应该是需要对他进行赋值修改

5、分析messageConverters,看Message转化为各种对象,诸如Byte、String之类的,我们看的是String

三、解决办法

1、懒人解决

RestTemplate restTemplate = new RestTemplate();
//可以在上图分析上看到StringHttpMessageConverter index=1,所以.
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);

2、遍历查询

RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> converterList =restTemplate.getMessageConverters();
int converterIndex = -1;
for (int i=0;i<converterList.size();i++){
    if(converterList.get(i).getClass() == StringHttpMessageConverter.class){
        converterIndex = i;
        break;
    }
}
if(converterIndex !=-1){
    restTemplate.getMessageConverters().set(converterIndex, new StringHttpMessageConverter(StandardCharsets.UTF_8));
}
 
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅析java中Integer传参方式的问题

    浅析java中Integer传参方式的问题

    以下是对java中Integer传参方式的问题进行了详细的介绍,需要的朋友可以过来参考下
    2013-09-09
  • spring boot基于Java的容器配置讲解

    spring boot基于Java的容器配置讲解

    这篇文章主要介绍了spring boot基于Java的容器配置讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Spring中@RestControllerAdvice注解的使用详解

    Spring中@RestControllerAdvice注解的使用详解

    这篇文章主要介绍了Spring中@RestControllerAdvice注解的使用详解,@RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,而@ControllerAdvice继承了@Component,需要的朋友可以参考下
    2024-01-01
  • Spring框架的JdbcTemplate使用

    Spring框架的JdbcTemplate使用

    它是 Spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。本文就来介绍一下Spring框架的JdbcTemplate使用,感兴趣的可以了解一下
    2021-09-09
  • IDEA教程创建SpringBoot前后端分离项目示例图解

    IDEA教程创建SpringBoot前后端分离项目示例图解

    在使用spring、mybatis等框架时,配置文件很复杂,有时复杂的让人想放弃Java,使用C#。springboot出现这一切问题就都不是问题
    2021-10-10
  • java agent 使用及实现代码

    java agent 使用及实现代码

    java agent的作用可以在字节码这个层面对类和方法进行修改的技术,能够在不影响编译的情况下,修改字节码。本文主要给大家讲解java agent 使用及实现代码,感兴趣的朋友一起看看吧
    2018-07-07
  • Windows 下安装配置 Eclipse详细教程

    Windows 下安装配置 Eclipse详细教程

    Eclipse是一款非常优秀的开源IDE,非常适合Java开发,由于支持插件技术,受到了越来越多的开发者的欢迎。配合众多令人眼花缭乱的插件,完全可以满足从企业级Java应用到手机终端Java游戏的开发。本文将带您手把手步入Eclipse的广阔天地
    2016-09-09
  • JAVA实现红包分发的示例代码

    JAVA实现红包分发的示例代码

    这篇文章主要介绍了JAVA实现红包分发的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • mybatis-plus @select动态查询方式

    mybatis-plus @select动态查询方式

    这篇文章主要介绍了mybatis-plus @select动态查询方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java完美实现2048小游戏

    Java完美实现2048小游戏

    本文给大家分享的是一则根据网友的代码改编的2048小游戏的源码,个人认为已经非常完美了,推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03

最新评论