1. 概述
在本文中,我们将深入探讨 CharacterEncodingFilter
在 Spring Boot 应用中的作用与使用方式。
如果你曾遇到过前后端交互时中文乱码的问题,那么这个组件你一定绕不开。它虽然低调,但非常关键。
2. CharacterEncodingFilter 是什么?
简单来说,CharacterEncodingFilter
是 Spring 提供的一个过滤器,用于统一设置请求和响应的字符编码格式。
✅ 它的作用是:
- 设置请求的字符编码(如 UTF-8)
- 强制应用该编码到响应输出中(通过
forceEncoding=true
)
⚠️ 如果不配置这个 Filter,Tomcat 等容器默认可能使用 ISO-8859-1 编码,导致中文乱码。
3. 实现方式
我们来看看如何在 Spring Boot 项目中配置这个 Filter。
3.1 创建 CharacterEncodingFilter 实例
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
上面这段代码做了两件事:
- 设置字符编码为 UTF-8(也可以根据需要换成 GBK、GBK2312 等)
- 设置
forceEncoding=true
,表示无论浏览器是否指定了编码,都强制使用我们设定的编码
💡 小贴士:如果不设置 forceEncoding=true
,那么只有当请求没有指定编码时才会生效。
3.2 注册 Filter 到过滤器链
接下来我们需要把这个 Filter 注册进 Spring 的 Filter 链中,可以使用 FilterRegistrationBean
来完成:
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(filter);
registrationBean.addUrlPatterns("/*");
return registrationBean;
这段代码的作用是:
- 将我们创建的
CharacterEncodingFilter
加入到 Filter 链中 - 匹配所有 URL 路径 (
/*
),确保全局生效
🔧 在非 Spring Boot 项目中(比如传统的 Spring MVC + web.xml),你可以直接在 web.xml
文件中声明这个 Filter 来达到相同效果。
4. 总结
这篇文章我们讲清楚了 CharacterEncodingFilter
的必要性,并给出了一个完整的配置示例。
虽然它只是一个简单的 Filter,但在处理中文数据时却能避免很多“踩坑”场景。特别是在前后端分离、API 接口调用频繁的系统中,统一字符编码至关重要。
📦 本文完整代码可从 GitHub 获取:https://github.com/eugenp/tutorials/tree/master/spring-boot-modules/spring-boot-mvc-3