编码过滤器配置
CharacterEncodingFilter统一设置请求和响应编码,解决POST请求乱码问题。
XML配置
XML
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
配置参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
| encoding | 编码格式 | UTF-8 |
| forceEncoding | 强制编码 | false |
| forceRequestEncoding | 强制请求编码 | false |
| forceResponseEncoding | 强制响应编码 | false |
forceEncoding=true时,无论请求是否已设置编码,都强制使用指定编码。
注解配置
Java
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean<CharacterEncodingFilter> encodingFilter() {
FilterRegistrationBean<CharacterEncodingFilter> registration =
new FilterRegistrationBean<>();
registration.setFilter(new CharacterEncodingFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("encoding", "UTF-8");
registration.addInitParameter("forceEncoding", "true");
registration.setOrder(1); // 优先级最高
return registration;
}
}
SpringBoot配置
SpringBoot自动配置编码过滤器,通过application.properties设置:
properties
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
过滤器执行顺序
编码过滤器必须放在最前面,确保其他过滤器处理时编码已正确设置:
XML
<!-- 编码过滤器 - 必须放在最前 -->
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 其他过滤器 -->
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
CharacterEncodingFilter只对POST请求有效,GET请求乱码需修改Tomcat配置。
要点总结
- CharacterEncodingFilter:统一请求和响应编码
- forceEncoding=true:强制使用指定编码
- 过滤器必须放在最前面执行
- SpringBoot自动配置,默认UTF-8
📝 发现内容有误?点击此处直接编辑