RestTemplate返回值中文亂碼問題
一、問題描述
使用RestTemplate發(fā)送請求,返回值中文亂碼
RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
二、代碼追蹤
DEBUG過程中即時查詢返回值是在哪里調度的,數值的改變是在哪里觸發(fā)的
1、追蹤getForEntity方法,發(fā)現execute方法

2、追蹤execute方法,發(fā)現doExecute方法

3、追蹤doExecute方法,發(fā)現extractData方法

4、發(fā)現有多個接口實現,debug跳轉定位是哪個方法,好了,終于發(fā)現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);總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring中@RestControllerAdvice注解的使用詳解
這篇文章主要介紹了Spring中@RestControllerAdvice注解的使用詳解,@RestControllerAdvice是一個組合注解,由@ControllerAdvice、@ResponseBody組成,而@ControllerAdvice繼承了@Component,需要的朋友可以參考下2024-01-01
IDEA教程創(chuàng)建SpringBoot前后端分離項目示例圖解
在使用spring、mybatis等框架時,配置文件很復雜,有時復雜的讓人想放棄Java,使用C#。springboot出現這一切問題就都不是問題2021-10-10
mybatis-plus @select動態(tài)查詢方式
這篇文章主要介紹了mybatis-plus @select動態(tài)查詢方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05

