1. 概述

在本文中,我们将深入探讨 CharacterEncodingFilterSpring 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


原始标题:CharacterEncodingFilter In SpringBoot