前提:记录一个小的注意点!
在一个项目中需要设置多个过滤器可能需要考虑它们之间的先后配置问题!
示例
我在web.xml中同时设置了HiddenHttpMethodFilter和CharacterEncodingFilter,具体的顺序如下:
<!-- 配置HiddenHttpMethodFilter-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置springMVC的编码过滤器-->
<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>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
配置后的运行结果发现编码过滤器并没有起效果。
前端表单:
控制类方法:
控制台输出:
debug:
结果发现传输中文信息乱码了。
原因
这是因为我们是先获取了请求参数,然后再进行编码集的过滤,所以没有了效果。
解决
调换HiddenHttpMethodFilter和CharacterEncodingFilter的顺序,编码过滤器置于HiddenHttpMethodFilter之前即可。
调整后运行结果:
编码过滤器起效!
ending.....