RestTemplate返回值中文亂碼問(wèn)題
一、問(wèn)題描述
使用RestTemplate發(fā)送請(qǐng)求,返回值中文亂碼
RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
二、代碼追蹤
DEBUG過(guò)程中即時(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解析了
- 通過(guò)上述代碼我們可以簡(jiǎn)單判斷,RestTemplate的消息響應(yīng)應(yīng)該是由messageConverters控制的
- 所以我們應(yīng)該是需要對(duì)他進(jìn)行賦值修改
5、分析messageConverters,看Message轉(zhuǎn)化為各種對(duì)象,諸如Byte、String之類(lèi)的,我們看的是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簡(jiǎn)化HTTP通信實(shí)現(xiàn)功能探究
- RestTemplate發(fā)送form-data請(qǐng)求上傳rul資源文件及對(duì)象參數(shù)方式
- 如何解決使用restTemplate進(jìn)行feign調(diào)用new HttpEntity<>報(bào)錯(cuò)問(wèn)題
相關(guān)文章
Spring中@RestControllerAdvice注解的使用詳解
這篇文章主要介紹了Spring中@RestControllerAdvice注解的使用詳解,@RestControllerAdvice是一個(gè)組合注解,由@ControllerAdvice、@ResponseBody組成,而@ControllerAdvice繼承了@Component,需要的朋友可以參考下2024-01-01IDEA教程創(chuàng)建SpringBoot前后端分離項(xiàng)目示例圖解
在使用spring、mybatis等框架時(shí),配置文件很復(fù)雜,有時(shí)復(fù)雜的讓人想放棄Java,使用C#。springboot出現(xiàn)這一切問(wèn)題就都不是問(wèn)題2021-10-10JAVA實(shí)現(xiàn)紅包分發(fā)的示例代碼
這篇文章主要介紹了JAVA實(shí)現(xiàn)紅包分發(fā)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03mybatis-plus @select動(dòng)態(tài)查詢方式
這篇文章主要介紹了mybatis-plus @select動(dòng)態(tài)查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05