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

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

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

4、發(fā)現(xiàn)有多個(gè)接口實(shí)現(xiàn),debug跳轉(zhuǎn)定位是哪個(gè)方法,好了,終于發(fā)現(xiàn)messageBody解析了

- 通過上述代碼我們可以簡單判斷,RestTemplate的消息響應(yīng)應(yīng)該是由messageConverters控制的
- 所以我們應(yīng)該是需要對(duì)他進(jìn)行賦值修改
5、分析messageConverters,看Message轉(zhuǎn)化為各種對(duì)象,諸如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);總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot使用RestTemplate實(shí)現(xiàn)HTTP請(qǐng)求詳解
- springboot中RestTemplate發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)示例
- SpringBoot中的RestTemplate使用方法詳解
- Spring RestTemplate簡化HTTP通信實(shí)現(xiàn)功能探究
- RestTemplate發(fā)送form-data請(qǐng)求上傳rul資源文件及對(duì)象參數(shù)方式
- 如何解決使用restTemplate進(jìn)行feign調(diào)用new HttpEntity<>報(bào)錯(cuò)問題
相關(guān)文章
基于Java實(shí)現(xiàn)數(shù)九天精準(zhǔn)計(jì)算的完整方案
在中國傳統(tǒng)歷法體系中,二十四節(jié)氣不僅是農(nóng)耕文明的智慧結(jié)晶,也是傳統(tǒng)文化數(shù)字化傳承的重要載體,其精準(zhǔn)計(jì)算是數(shù)九天推演的基礎(chǔ),本文將從工程實(shí)現(xiàn)角度,深度解析基于 Java 語言結(jié)合 tyme 歷法庫實(shí)現(xiàn)冬至日期計(jì)算、數(shù)九天周期推演的完整方案,需要的朋友可以參考下2026-02-02
詳解Java如何實(shí)現(xiàn)一個(gè)BlockingQueue
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)一個(gè)BlockingQueue阻塞隊(duì)列,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
SpringBoot使用spring retry重試機(jī)制的操作詳解
實(shí)際工作中由于網(wǎng)絡(luò)波動(dòng)等原因?qū)е麓a執(zhí)行失敗需要重新執(zhí)行,保證最終能夠完成業(yè)務(wù)功能,通常來說,會(huì)用try/catch,while循環(huán)或者定時(shí)任務(wù)重處理,但是這樣的做法缺乏統(tǒng)一性,要多寫很多代碼,spring-retry組件可以通過注解優(yōu)雅的實(shí)現(xiàn)重處理功能2024-12-12
springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)(賬號(hào)密碼登錄和使用手機(jī)驗(yàn)證碼登錄)
這篇文章給大家介紹springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)方法,包括賬號(hào)密碼登錄和使用手機(jī)驗(yàn)證碼登錄功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-07-07
Java使用poi-tl設(shè)置word圖片環(huán)繞方式為浮于在文字上方
POI-TL 是一個(gè)基于 Apache POI 的 Java 庫,專注于在 Microsoft Word 文檔(.docx 格式)中進(jìn)行模板填充和動(dòng)態(tài)內(nèi)容生成,下面我們看看如何使用poi-tl設(shè)置word圖片環(huán)繞方式為浮于在文字上方吧2025-03-03
Java中ArrayList與順序表的定義與實(shí)現(xiàn)方法
ArrayList是一個(gè)實(shí)現(xiàn)List接口的類,底層是動(dòng)態(tài)類型順序表,本質(zhì)也就是數(shù)組,動(dòng)態(tài)主要體現(xiàn)在它的擴(kuò)容機(jī)制,下面這篇文章主要給大家介紹了關(guān)于Java中ArrayList與順序表的定義與實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-07-07
Java使用MessageFormat應(yīng)注意的問題
這篇文章主要介紹了Java使用MessageFormat應(yīng)注意的問題,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-06-06
完美解決Server?returned?HTTP?response?code:403?for?URL報(bào)錯(cuò)問題
在調(diào)用某個(gè)接口的時(shí)候,突然就遇到了Server?returned?HTTP?response?code:?403?for?URL報(bào)錯(cuò)這個(gè)報(bào)錯(cuò),導(dǎo)致獲取不到接口的數(shù)據(jù),下面小編給大家分享解決Server?returned?HTTP?response?code:403?for?URL報(bào)錯(cuò)問題,感興趣的朋友一起看看吧2023-03-03

