解决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,乱码问题终于解决了。

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