ExceptionHandler返回中文乱码

179 阅读1分钟

问题描述

在项目里自定义了一个ExceptionHandler,结果被ExceptionHandler处理的错误里中文全部变成了问号。

原因分析

ExceptionHandler使用的StringHttpMessageConverter类默认使用的不是UTF-8字符,不支持中文导致中文全变成问号。

解决

在WebMvcConfig里配置所有HttpMessageConverter的默认编码集为UTF-8。

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        for(HttpMessageConverter httpMessageConverter:converters){
            if(StringHttpMessageConverter.class.isAssignableFrom(httpMessageConverter.getClass())){
                ((StringHttpMessageConverter)httpMessageConverter).setDefaultCharset(StandardCharsets.UTF_8);
            }
        }
    }
}