日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java web乱码_【SpringBoot WEB 系列】RestTemplate 之中文乱码问题 fix

發布時間:2025/3/19 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java web乱码_【SpringBoot WEB 系列】RestTemplate 之中文乱码问题 fix 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【WEB 系列】RestTemplate 之中文亂碼問題 fix

在 RestTemplate 基礎用法博文中,post json 表單時,會發現存在中文亂碼問題,本文主要介紹對應的解決方案

I. 中文亂碼 Fix

1. "罪魁禍首"

場景復現

/**
?*?json表單
?*/
public?void?jsonPost()?{
????RestTemplate?restTemplate?=?new?RestTemplate();

????HttpHeaders?headers?=?new?HttpHeaders();
????headers.setContentType(MediaType.APPLICATION_JSON);

????JSONObject?params?=?new?JSONObject();
????params.put("name",?"一灰灰Blog");
????params.put("age",?20);

????HttpEntity?request?=?new?HttpEntity<>(params.toJSONString(),?headers);
????String?response?=?restTemplate.postForObject("http://127.0.0.1:8080/body",?request,?String.class);
????log.info("json?post?res:?{}",?response);
}

輸出結果如下:

(json?post?res:?params:?{}?|?DemoRest.ReqBody(name=???Blog,?age=20)
headers:?{"content-length":"27","host":"127.0.0.1:8080","content-type":"application/json","connection":"keep-alive","accept":"text/plain,?application/json,?application/*+json,?*/*","user-agent":"Java/1.8.0_171"}
cookies:

原因定位

RestTemplate 中存在一個HttpMessageConverter列表的屬性成員,而HttpMessageConverter主要的職責就是消息轉碼

導致我們中文亂碼的一個關鍵點在于StringHttpMessageConverter采用的默認編碼格式為StandardCharsets.ISO_8859_1

2. 指定 StringHttpMessageConverter 編碼

既然是因為StringHttpMessageConverter的默認編碼不是 UTF-8,那么將它手動改成 utf-8 不就 over 了么

/**
?*?中文亂碼問題fix
?*/
public?void?chinese()?{
????RestTemplate?restTemplate?=?new?RestTemplate();

????HttpHeaders?headers?=?new?HttpHeaders();
????headers.setContentType(MediaType.APPLICATION_JSON);

????JSONObject?params?=?new?JSONObject();
????params.put("name",?"一灰灰Blog");
????params.put("age",?20);

????HttpEntity?request?=?new?HttpEntity<>(params.toJSONString(),?headers);//?中文亂碼,主要是?StringHttpMessageConverter的默認編碼為ISO導致的
????List>?list?=?restTemplate.getMessageConverters();for?(HttpMessageConverter?converter?:?list)?{if?(converter?instanceof?StringHttpMessageConverter)?{
????????????((StringHttpMessageConverter)?converter).setDefaultCharset(Charset.forName("UTF-8"));break;
????????}
????}
????String?response?=?restTemplate.postForObject("http://127.0.0.1:8080/body",?request,?String.class);
????log.info("json?post?res:?{}",?response);
}

測試輸出如:

(json post res: params:?{}?| DemoRest.ReqBody(name=一灰灰Blog, age=20)
headers:?{"content-length":"33","host":"127.0.0.1:8080","content-type":"application/json","connection":"keep-alive","accept":"text/plain,?application/json,?application/*+json,?*/*","user-agent":"Java/1.8.0_171"}
cookies:

3. 傳參 POJO

在看RestTemplate的HttpMessageConvert時,會看到默認提供了一個MappingJackson2HttpMessageConverter,那么我們直接傳參 POJO,走 Jackson 序列化,是不是也可以解決中文亂碼呢?

@Data
@NoArgsConstructor
@AllArgsConstructor
public?static?class?InnerParam?implements?Serializable?{
????private?static?final?long?serialVersionUID?=?-3693060057697231136L;
????private?String?name;
????private?Integer?age;
}


//?直接傳一個POJO
public?void?chinese()?{
????HttpHeaders?headers?=?new?HttpHeaders();
????headers.setContentType(MediaType.APPLICATION_JSON);

????RestTemplate?restTemplate?=?new?RestTemplate();
????InnerParam?innerParam?=?new?InnerParam("一灰灰Blog",?20);
????String?HttpEntity?entity?=?new?HttpEntity<>(innerParam,?headers);
????response?=?restTemplate.postForObject("http://127.0.0.1:8080/body",?entity,?String.class);
????log.info("json?post?DO?res:?{}",?response);
}

輸出結果如下

(json post DO res: params:?{}?| DemoRest.ReqBody(name=一灰灰Blog, age=20)
headers:?{"content-length":"33","host":"127.0.0.1:8080","content-type":"application/json","connection":"keep-alive","accept":"text/plain,?application/json,?application/*+json,?*/*","user-agent":"Java/1.8.0_171"}
cookies:

說明:上面的 InnerParam 對象改成 HashMap,也是 ok 的

II. 其他

0. 項目&系列博文

博文

  • 【WEB 系列】RestTemplate 之自定義請求頭
  • 【WEB 系列】RestTemplate 基礎用法小結

源碼

  • 工程:https://github.com/liuyueyi/spring-boot-demo
  • 源碼: https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/221-web-resttemplate

1. 一灰灰 Blog

盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現 bug 或者有更好的建議,歡迎批評指正,不吝感激

下面一灰灰的個人博客,記錄所有學習和工作中的博文,歡迎大家前去逛逛

  • 一灰灰 Blog 個人博客 https://blog.hhui.top
  • 一灰灰 Blog-Spring 專題博客 http://spring.hhui.top
一灰灰blog

總結

以上是生活随笔為你收集整理的java web乱码_【SpringBoot WEB 系列】RestTemplate 之中文乱码问题 fix的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91精品免费视频 | 九九九精品视频 | www.狠狠艹 | 日韩av高清 | 20日本xxxxxxxxx46 欧美激情一级 | 日韩av资源 | 四房婷婷 | av毛片精品| 国产伦精品一区二区三区妓女下载 | 欧美二区视频 | 一二三四区在线 | 动漫3d精品一区二区三区乱码 | 日本福利小视频 | 亚欧美色图 | 国产片网站 | 大胸美女吻戏 | 欧美日韩精品一区二区三区视频播放 | 日韩经典在线观看 | 亚洲人一区二区三区 | 亚洲第一二三区 | 99在线无码精品入口 | 青青一区二区 | 国产精品欧美大片 | 色综合婷婷 | 亚洲小说春色综合另类 | 嫩草影院在线视频 | 中文视频在线观看 | 成人快色 | 亚洲天堂久久新 | 撕开少妇裙子猛然进入 | 五月婷婷久久久 | 久久久免费观看视频 | 亚洲精品少妇一区二区 | 美女毛片 | 亚洲精品中文无码AV在线播放 | 西西人体高清44rt·net | 色老头在线观看 | 国产91在线高潮白浆在线观看 | 日本丰满少妇一区二区三区 | 亚洲小说区图片区都市 | 亚洲制服av | 国产免费av片在线 | 国产一区一区 | 西西444www大胆无视频 | 在线免费视频观看 | 亚洲精品一区二区在线 | 搡8o老女人老妇人老熟 | 国产毛片久久久久 | 女王脚交玉足榨精调教 | 成年人视频在线 | 西比尔在线观看完整视频高清 | 午夜免费福利网站 | 国产精品高潮AV无码 | 亚洲自拍激情 | 毛片黄片免费看 | 日韩欧美一区二区在线观看 | 欧美亚洲国产精品 | 香蕉久久一区二区三区 | 日本中文字幕在线播放 | 欧美性生交xxxxx久久久缅北 | 污污的视频在线免费观看 | 国产在线看黄 | 国产毛片毛片毛片毛片毛片毛片 | 中文字幕一区二区在线播放 | 成人欧美在线 | 色综合久久88色综合天天6 | 体感预报日剧 | 国内精品亚洲 | h片在线播放 | 国产精品亚洲欧美 | 日本少妇裸体做爰高潮片 | 青草av在线 | 看黄色的网址 | 日韩欧美在线观看一区二区 | 在线日韩三级 | 少妇与公做了夜伦理 | 午夜毛片在线 | 欧美精品123 | 中国黄色一级毛片 | av色吧 | 午夜精品久久久久久 | 亚洲欧美色图在线 | 亚洲人妻一区二区 | 精品国产乱码久久久久夜深人妻 | 在线观看免费av网站 | 国产黄色成人 | 依依成人在线 | 亚洲性欧美| 超碰一区二区 | 国产精品一区二区不卡 | 毛片一区 | 久久只有这里有精品 | 无码gogo大胆啪啪艺术 | 日韩欧美综合在线 | 国产1区二区 | 国产乱淫av | 日韩黄色免费看 | av一二三 | 国产精品 色 |