成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

RestTemplate中文亂碼完美解決方案

Eastboat / 1967人閱讀

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

RestTemplate中對(duì)字符串使用的是StringHttpMessageConverter中默認(rèn)的編碼

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

ISO_8859_1編碼格下,中文是亂碼的。因此我們需要將編碼格式設(shè)置為UTF-8的格式才能支持中文。
網(wǎng)絡(luò)上大部分的教程都是通過(guò)以下方式來(lái)修改編碼格式

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

原因是在RestTemplate的構(gòu)造函數(shù)中,對(duì)messageConverters賦值時(shí),在下標(biāo)為1的位置設(shè)置的是StringHttpMessageConverter對(duì)象。

public class RestTemplate extends InterceptingHttpAccessor implements RestOperations {
    public RestTemplate() {
        this.messageConverters.add(new ByteArrayHttpMessageConverter());
        this.messageConverters.add(new StringHttpMessageConverter());//此處設(shè)置
        this.messageConverters.add(new ResourceHttpMessageConverter(false));
        //省略其他代碼
    }
}

但是這種寫(xiě)死下標(biāo)的方式是極為不推薦的,因?yàn)椴慌懦齋pring在后續(xù)版本中因?yàn)橐肓似渌D(zhuǎn)換器而導(dǎo)致下標(biāo)變化的問(wèn)題。推薦使用以下方式。

public static void setRestTemplateEncode(RestTemplate restTemplate) {
    if (null == restTemplate || ObjectUtils.isEmpty(restTemplate.getMessageConverters())) {
        return;
    }

    List> messageConverters = restTemplate.getMessageConverters();
    for (int i = 0; i < messageConverters.size(); i++) {
        HttpMessageConverter httpMessageConverter = messageConverters.get(i);
        if (httpMessageConverter.getClass().equals(StringHttpMessageConverter.class)) {
            messageConverters.set(i, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        }
    }
}

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

以上方式自己親測(cè)可用,如果使用了上述方式還是亂碼的話,可以排查下是不是后端沒(méi)有設(shè)置編碼格式

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75771.html

相關(guān)文章

  • 如何解決SSM框架前臺(tái)傳參數(shù)到后臺(tái)亂碼的問(wèn)題

    最近在做一個(gè)SSM框架的項(xiàng)目,總是遇到一個(gè)問(wèn)題,就是后臺(tái)接收前端傳遞的中文參數(shù)的時(shí)候,參數(shù)是亂碼的,導(dǎo)致sql語(yǔ)句經(jīng)常無(wú)法執(zhí)行,但是有很奇怪,在測(cè)試環(huán)境和生產(chǎn)環(huán)境都是正常的,就是本地開(kāi)發(fā)環(huán)境總是這么坑人,那如何解決呢?1、比較累人,就是能不傳中文就不傳中文參數(shù),對(duì)于這點(diǎn),大家就笑笑而過(guò)就行了。。。。 2、還是挺累人,真的得傳中文,那就將中文強(qiáng)制轉(zhuǎn)碼了,如下: 中文.getBytes(UTF-8);...

    niuxiaowei111 評(píng)論0 收藏0
  • 解決Phalcon與Mysql連接出現(xiàn)中文亂碼

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

    garfileo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<