国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

RestTemplate中文亂碼完美解決方案

Eastboat / 1968人閱讀

摘要:中對字符串使用的是中默認的編碼省略其他代碼編碼格下,中文是亂碼的。因此我們需要將編碼格式設置為的格式才能支持中文。以上方式自己親測可用,如果使用了上述方式還是亂碼的話,可以排查下是不是后端沒有設置編碼格式

RestTemplate中對字符串使用的是StringHttpMessageConverter中默認的編碼

</>復制代碼

  1. public class StringHttpMessageConverter extends AbstractHttpMessageConverter {
  2. //省略其他代碼
  3. public static final Charset DEFAULT_CHARSET = StandardCharsets.ISO_8859_1;
  4. }

ISO_8859_1編碼格下,中文是亂碼的。因此我們需要將編碼格式設置為UTF-8的格式才能支持中文。
網絡上大部分的教程都是通過以下方式來修改編碼格式

</>復制代碼

  1. RestTemplate restTemplate = new RestTemplate();
  2. restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));

原因是在RestTemplate的構造函數中,對messageConverters賦值時,在下標為1的位置設置的是StringHttpMessageConverter對象。

</>復制代碼

  1. public class RestTemplate extends InterceptingHttpAccessor implements RestOperations {
  2. public RestTemplate() {
  3. this.messageConverters.add(new ByteArrayHttpMessageConverter());
  4. this.messageConverters.add(new StringHttpMessageConverter());//此處設置
  5. this.messageConverters.add(new ResourceHttpMessageConverter(false));
  6. //省略其他代碼
  7. }
  8. }

但是這種寫死下標的方式是極為不推薦的,因為不排除Spring在后續版本中因為引入了其他轉換器而導致下標變化的問題。推薦使用以下方式。

</>復制代碼

  1. public static void setRestTemplateEncode(RestTemplate restTemplate) {
  2. if (null == restTemplate || ObjectUtils.isEmpty(restTemplate.getMessageConverters())) {
  3. return;
  4. }
  5. List> messageConverters = restTemplate.getMessageConverters();
  6. for (int i = 0; i < messageConverters.size(); i++) {
  7. HttpMessageConverter httpMessageConverter = messageConverters.get(i);
  8. if (httpMessageConverter.getClass().equals(StringHttpMessageConverter.class)) {
  9. messageConverters.set(i, new StringHttpMessageConverter(StandardCharsets.UTF_8));
  10. }
  11. }
  12. }

我們新增一個方法,將RestTemplate對象傳遞進去,內部遍歷messageConverters,找到StringHttpMessageConverter并替換為UTF-8格式的StringHttpMessageConverter對象即可。

</>復制代碼

  1. 以上方式自己親測可用,如果使用了上述方式還是亂碼的話,可以排查下是不是后端沒有設置編碼格式

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75771.html

相關文章

  • 如何解決SSM框架前臺傳參數到后臺亂碼的問題

    最近在做一個SSM框架的項目,總是遇到一個問題,就是后臺接收前端傳遞的中文參數的時候,參數是亂碼的,導致sql語句經常無法執行,但是有很奇怪,在測試環境和生產環境都是正常的,就是本地開發環境總是這么坑人,那如何解決呢?1、比較累人,就是能不傳中文就不傳中文參數,對于這點,大家就笑笑而過就行了。。。。 2、還是挺累人,真的得傳中文,那就將中文強制轉碼了,如下: 中文.getBytes(UTF-8);...

    niuxiaowei111 評論0 收藏0
  • 解決Phalcon與Mysql連接出現中文亂碼

    摘要:找到文件夾下的文件添加到數據庫連接處案例完美解決亂碼 1.找到文件夾下的 app/config/service.php 文件 2.添加 ‘charset’ => ‘utf8’ 到數據庫連接處 案例: $di->set(‘db’, function() use ($config) { return new DbAdapter(array( ‘host’ => ...

    garfileo 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<