spring boot 2/3 配置字符编码推荐使用配置文件方式:设置server.servlet.encoding.charset=utf-8、force=true、enabled=true,可统一request/response编码;若手动注册characterencodingfilter,则需禁用自动配置(server.servlet.encoding.enabled=false),并注意uri乱码需额外配置server.tomcat.uri-encoding=utf-8。

Spring Boot 2 和 3 中配置字符编码过滤器,核心目标是统一请求(request)和响应(response)的字符集为 UTF-8,避免中文乱码。两种主流方式都有效,但推荐优先使用配置文件方式——简洁、稳定、符合 Spring Boot 自动配置理念。
直接在 application.properties 或 application.yml 中配置(推荐)
这是最轻量、最可靠的方式,适用于绝大多数场景。Spring Boot 2.0+ 默认已内置 CharacterEncodingFilter,只需启用并指定参数即可。
- application.properties:
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true
- application.yml:
server:
servlet:
encoding:
charset: UTF-8
force: true
enabled: true
注意:force=true 表示强制对 request 和 response 都应用该编码,不依赖客户端是否带 Content-Type;enabled=true 是开启自动配置的关键开关(Spring Boot 2.3+ 默认为 true,但显式声明更稳妥)。
手动注册 CharacterEncodingFilter(适合需定制或兼容旧逻辑)
当需要细粒度控制(如仅对特定路径生效、调整过滤器顺序),或项目中禁用了默认编码支持(例如设置了 server.servlet.encoding.enabled=false),可手动注册过滤器。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 创建配置类,返回
FilterRegistrationBean<characterencodingfilter></characterencodingfilter>:
@Configuration
public class CharsetConfig {
@Bean
public FilterRegistrationBean
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
FilterRegistrationBean
registrationBean.setFilter(filter);
registrationBean.addUrlPatterns("/*");
registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); // 确保最早执行
return registrationBean;
}
}
⚠️ 特别注意:若采用此方式,务必在配置文件中设置 server.servlet.encoding.enabled=false,否则 Spring Boot 会同时加载两套编码过滤器,可能引发冲突或重复设置。
补充:URI 路径参数乱码(如 GET 请求中文路径或查询参数)
上述配置主要解决 POST 请求体及响应内容的编码。若遇到浏览器地址栏输入中文、重定向带中文参数等导致的 URI 乱码,还需额外配置 Tomcat 的 URI 编码:
- 在
application.properties中添加:
server.tomcat.uri-encoding=UTF-8
该配置仅对内嵌 Tomcat 生效(Spring Boot 默认),作用是让 Tomcat 解析 URL 时按 UTF-8 解码。Jetty 或 Undertow 用户需查阅对应容器文档做等效配置。
验证是否生效的小技巧
可在 Controller 中打印原始字节验证:
- 接收一个含中文的请求参数,用
req.getQueryString().getBytes(StandardCharsets.ISO_8859_1)再转 UTF-8,若结果正常说明 request 编码已生效; - 返回 JSON 或 HTML 响应后,用浏览器开发者工具查看响应头中的
Content-Type是否含charset=utf-8; - 日志中观察
CharacterEncodingFilter是否被 Spring 容器加载(启动时有相关 INFO 日志)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










