Spring Boot 中文乱码问题解决方案汇总

最近在公司项目当中 升级了Springboot 版本 出现一点小问题(乱码了)

访问地址  本文当中使用是httpClient 测试

###
GET http://localhost:8081/ebook/list?pageNum=1&pageSize=10000
Accept: application/json

结果为

 跑起来后  发现乱码了  就去百度了一下  后面发现百度上说的都设置还是没有效果 不知道是不是自己傻 没有找到对应文章 

经过自己研究和看文档 有2种方式可以解决这个问题  

解决方案 一 

在配置文件中进行如下修改 

# 解决接口返回中文都是乱码
server.servlet.encoding.charset=utf-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true

访问一下 查看一下结果 如下

当然 你如果是.yml 配置的话 把配置文件那里复制一下 去这个网站生成一下就好了   网址如下http:// toyaml.com/index.html

解决方案二 自己写个类 继承 WebMvcConfigurationSupport 这个类  代码如下

package com.zw.wiki.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.nio.charset.StandardCharsets;
import java.util.List;

/**
 * 描述:
 * 解决springboot 乱码问题
 *
 * @author mac
 * @create 2021-09-28 6:45 PM
 */
@Configuration
public class MvcConfigGarbled extends WebMvcConfigurationSupport {

    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        for (HttpMessageConverter<?> converter : converters) {
            // 解决 Controller 返回普通文本中文乱码问题
            if (converter instanceof StringHttpMessageConverter) {
                ((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
            }

            // 解决 Controller 返回json对象中文乱码问题
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                ((MappingJackson2HttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
            }
        }
    }

}

 原理如下 

/**
 * 这个方法为 RequestMappingHandlerAdapter 和 ExceptionHandlerExceptionResolver 提供了访问共享的 HttpMessageConverter 的能力
 * RequestMappingHandlerAdapter 的职责就包括对于 @RequestMapping 注解的解析处理能力
 * ExceptionHandlerExceptionResolver 的职责就包括对于 @ExceptionHandler 注解的解析处理能力
 */
protected final List<HttpMessageConverter<?>> getMessageConverters() {
  if (this.messageConverters == null) {
    this.messageConverters = new ArrayList<>();
    /*
     * 空方法,留给子类扩展
     * 通过这个方法可以添加自己的针对特定内容类型的实例,则可以达到优先级最高,等同于屏蔽掉列表中其他同类型实例
     */
    configureMessageConverters(this.messageConverters);
    if (this.messageConverters.isEmpty()) {
      // 添加默认的各种converter
      addDefaultHttpMessageConverters(this.messageConverters);
    }
    /*
     * 空方法,留给子类扩展
     * 可以针对框架自带的默认的各种类型的 HttpMessageConverter 实例进行一些属性上的自定义设置
     */
    extendMessageConverters(this.messageConverters);
  }
  return this.messageConverters;
}

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟子涵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值