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);
    }
}

 

posted @ 2021-08-19 10:43  眼里有激光  阅读(2287)  评论(0编辑  收藏  举报