• spring boot 中文乱码问题


    在刚接触spring boot 2.0的时候,遇到了一些中文乱码的问题,网上找了一些解决方法。

    这里自己做个汇总。

    在application.properties文件中添加:

    1 spring.http.encoding.force=true
    2 spring.http.encoding.charset=UTF-8
    3 spring.http.encoding.enabled=true
    4 server.tomcat.uri-encoding=UTF-8

    有如上配置后,拦截器中返回的中文已经不乱码了,但是controller中返回的数据依旧乱码。

    需要在@RequestMapping(这一类定义请求路径的注解)中增加produces="text/plain;charset=UTF-8"

    但是这样就得要限定请求的数据类型,并且需要在每个请求里都加上这个,工作比较繁杂。

    可以自己写一个配置文件类,继承WebMvcConfigurationSupport,代码如下:

     1 @Configuration
     2 public class CustomMVCConfiguration extends WebMvcConfigurationSupport{
     3 
     4     @Bean
     5     public HttpMessageConverter<String> responseBodyConverter() {
     6         StringHttpMessageConverter converter = new StringHttpMessageConverter(
     7                 Charset.forName("UTF-8"));
     8         return converter;
     9     }
    10 
    11     @Override
    12     public void configureMessageConverters(
    13             List<HttpMessageConverter<?>> converters) {
    14         super.configureMessageConverters(converters);
    15         converters.add(responseBodyConverter());
    16     }
    17 
    18     @Override
    19     public void configureContentNegotiation(
    20             ContentNegotiationConfigurer configurer) {
    21         configurer.favorPathExtension(false);
    22     }
    23 }

    基本上就解决了乱码问题。

    如果出现org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class java.util.LinkedHashMap

    就需要在配置类中,添加一些代码,完整的代码如下:

     1 @Configuration
     2 public class InterceptorConfig extends WebMvcConfigurationSupport {
     3 
     4     /**
     5      * 解决中文乱码问题
     6      */
     7     @Bean
     8     public HttpMessageConverter<String> responseBodyConverter() {
     9         return new StringHttpMessageConverter(Charset.forName("UTF-8"));
    10     }
    11 
    12     @Bean
    13     public ObjectMapper getObjectMapper() {
    14         return new ObjectMapper();
    15     }
    16 
    17     @Bean
    18     public MappingJackson2HttpMessageConverter messageConverter() {
    19         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    20         converter.setObjectMapper(getObjectMapper());
    21         return converter;
    22     }
    23 
    24     @Override
    25     public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    26         super.configureMessageConverters(converters);
    27         //解决中文乱码
    28         converters.add(responseBodyConverter());
    29         //解决 添加解决中文乱码后 上述配置之后,返回json数据直接报错 500:no convertter for return value of type
    30         converters.add(messageConverter());
    31         converters.add(responseBodyConverter());
    32     }
    33 
    34     @Override
    35     public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    36         configurer.favorPathExtension(false);
    37     }
    38 }
  • 相关阅读:
    [算法] Tarjan算法求割点
    [题解] POJ2689 [质数距离]
    [题解] 「NOIP2009」最优贸易
    pyCharm更换主题、字体大小和编辑器字体颜色
    python之冒泡排序简单算法
    修改pip阿里镜像
    Postman工具简介
    接口文档解析
    HTTP接口请求
    接口(API)测试学习
  • 原文地址:https://www.cnblogs.com/Darlin356230410/p/9269838.html
Copyright © 2020-2023  润新知