解決Springboot @ResponseBody 返回中文亂碼問題

如下代碼,返回中文亂碼

@RequestMapping("/getAddress")
@ResponseBody
public String getAddress(){
    return "北京市"; // 頁面顯示???
}

解決辦法:
設置自帶的StringHttpMessageConverter編碼為UTF-8(默認是ISO_8859_1)

@Configuration
public class MyConfiguration extends WebMvcConfigurationSupport {
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 解決controller返回字符串中文亂碼問題
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof StringHttpMessageConverter) {
                ((StringHttpMessageConverter)converter).setDefaultCharset(StandardCharsets.UTF_8);
            }
        }
    }
}

注意:不能用以下方式

// ?。?!不能用這種方式,如果用了將不會添加其他的converter
@Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
        converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8));
    }

查看org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#getMessageConverters方法可以看到

protected final List<HttpMessageConverter<?>> getMessageConverters() {
        if (this.messageConverters == null) {
            this.messageConverters = new ArrayList<>();         
            configureMessageConverters(this.messageConverters);
            // 如重寫configureMessageConverters,list不為空,導致不會添加一些默認的converter
            if (this.messageConverters.isEmpty()) {
                // 添加其它默認的converter
                addDefaultHttpMessageConverters(this.messageConverters);
            }
            // 正確解法應該重寫這個方法
            extendMessageConverters(this.messageConverters);
        }
        return this.messageConverters;
    }

https://shimo.im/docs/gGQHg8xPC3X8cPHV/ 《2020年最新Java架構師系統進階資料免費領取》,可復制鏈接后用石墨文檔 App 或小程序打開

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容