记一次SpringBoot返回数据乱码引发的思考

本文记录了一次SpringBoot项目在添加Listener、Filter和Interceptor后出现返回中文乱码的问题。通过源码分析,发现HttpMessageConverters初始化过程中的字符集问题。解决方案包括在Controller中指定Response内容格式和修改Spring默认字符集。尽管问题得到解决,但遗留问题为为何加载特定组件会导致HttpMessageConverters实例编码不一致。
摘要由CSDN通过智能技术生成

记一次SpringBoot返回数据乱码引发的思考

问题背景

使用SpringBoot的starter构建了一个demo项目,添加了一个Get接口,返回一段字符串,有中文、数字和英文,接口一直正常,直到昨天在项目添加了Listener、Filter和Interceptor,接口返回的中文乱码了。

解决过程

  1. 添加完Listener、Filter和Interceptor(内部都只打印日志,无业务逻辑)后请求接口返回如下:

  2. 将代码回滚后,显示正常:

  3. Debug到AbstractMessageConverterMethodProcessor中,发现StringHttpMessageConverter在write body时用的字符集为ISO-8859-1,修改defaultCharsetUTF-8后显示正常;

  4. 搜索HttpMessageConverters的相关资料:

  1. 修改Spring初始化后的StringHttpMessageConverter的默认字符集为UTF-8

解决方案:

一、指定本请求产生的Response的内容格式
@RequestMapping中设置produce:@RequestMapping(value = "/config",produces = {"text/html;charset=UTF-8"})

二、修改Spring的StringHttpMessageConverter默认字符集

 @Configuration
public class WebMvcConfigure extends WebMvcConfigurationSupport {
     /* 该方法不建议使用,因为此方法接管了Spring初始化时对HttpMessageConverters的初始化过程,接管以后,Spring不再对此进行初始化
     * 该方法在 extendMessageConverters 之前执行
    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值