解決SpringBoo輸出文檔的title亂碼問題

問題背景

最近橙子開發中遇到一個問題,Spring Boot的輸出文檔內容出現了title亂碼,但是文檔內容並沒有亂碼。效果如下圖所示
在這裏插入圖片描述
橙子目前的項目是採用前後端分離開發的,前端使用的是基於umi封裝的一套框架,後端是採用spring boot。但是不知道爲什麼集成到一起後項目出現亂碼。

原因

看到這種問題究其原因肯定是編碼導致的。
打開遊覽器查看一下請求的響應編碼一看,果然是的。輸出文檔的編碼並不是我指定的UTF-8
在這裏插入圖片描述
由於並不知道具體什麼原因導致的,去網上找了一下比如設置http編碼格式

spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8

但是都不起作用。於是我開始debug源碼之路。。。經過漫長的求索
最後我找到了輸出內容編碼異常的原因是由於org.springframework.http.converter.StringHttpMessageConverter類的defaultCharset導致的。
在這裏插入圖片描述
spring 設置輸出內容默認編碼格式的位置在AbstractHttpMessageConverter類的addDefaultHeaders方法。

protected void addDefaultHeaders(HttpHeaders headers, T t, @Nullable MediaType contentType) throws IOException {
		....
		Charset defaultCharset = getDefaultCharset();
		if (defaultCharset != null) {
			contentTypeToUse = new MediaType(contentTypeToUse, defaultCharset);
		}
		headers.setContentType(contentTypeToUse);
		....
	}

解決

基於原因已經找到了,解決起來就簡單很多了。
直接設置好StringHttpMessageConverter類的默認編碼格式即可。

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
	...
	/**
     * 修改StringHttpMessageConverter默認配置
     * @param converters
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
        super.addDefaultHttpMessageConverters(converters);
        StringHttpMessageConverter converter = (StringHttpMessageConverter)converters.get(1);
        converter.setDefaultCharset(StandardCharsets.UTF_8);
    }
}

其實還有一種解決方案,不過目前我還沒嘗試。
在controller層建立index.html文件的映射,在@RequestMapping裏設置 produces = { “application/json;charset=UTF-8” }

好了最終輸出文檔的內容編碼格式變成了UTF-8,亂碼問題終於解決了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章