spring boot--解决中文乱码问题
前言
在spring boot请求返回中文的时候,有时会出现中文字符为乱码或者是????的情况,这是因为spring boot 默认的StringHttpMessageConverter值为:ISO_8859_1,我们只需要将其改为:utf-8即可
代码
@Configuration public class CustomMVCConf extends WebMvcConfigurationSupport {
//覆写extendMessageConverters方法即可 @Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { for (HttpMessageConverter<?> converter :converters){ if(converter instanceof StringHttpMessageConverter){ ((StringHttpMessageConverter)converter).setDefaultCharset(StandardCharsets.UTF_8); //将StringHttpMessageConverter改为utf-8 } } super.extendMessageConverters(converters); } }
需要注意的是
不要使用多个class继承WebMvcConfigurationSupport类进行覆写配置,因为只有一个class会生效,原因可以参考这篇文章
@Configuration public class CustomMVCConf extends WebMvcConfigurationSupport { //复写addCorsMappings 方法,实现cors @Override protected void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("*") .allowedOrigins("*") .allowedHeaders("*"); super.addCorsMappings(registry); } //复写extendMessageConverters 方法,解决中文乱码或????号问题 @Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { for (HttpMessageConverter<?> converter :converters){ if(converter instanceof StringHttpMessageConverter){ ((StringHttpMessageConverter)converter).setDefaultCharset(StandardCharsets.UTF_8); } } super.extendMessageConverters(converters); } }
多个class配置WebMvcConfig
如果你觉得所有的配置都写在一个class类,太过于臃肿,那么可以使用implements实现接口的方式,使用多个了配置
config1 class
@Configuration public class CustomMVCConf implements WebMvcConfigurer { //复写addCorsMappings 方法,实现cors @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("*") .allowedOrigins("*") .allowedHeaders("*"); WebMvcConfigurer.super.addCorsMappings(registry); } }
config2 class
@Configuration public class CustomMVCConf2 implements WebMvcConfigurer { @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { for (HttpMessageConverter<?> converter : converters) { if (converter instanceof StringHttpMessageConverter) { ((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8); } } WebMvcConfigurer.super.extendMessageConverters(converters); } }