Spring 配置请求过滤器,编码格式设为UTF-8,避免中文乱码
时间:2022-07-24
本文章向大家介绍Spring 配置请求过滤器,编码格式设为UTF-8,避免中文乱码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码-->
2 <filter>
3 <filter-name>springUtf8Encoding</filter-name>
4 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
5 <init-param>
6 <param-name>encoding</param-name>
7 <param-value>UTF-8</param-value>
8 </init-param>
9 <init-param>
10 <param-name>forceEncoding</param-name>
11 <param-value>true</param-value>
12 </init-param>
13 </filter>
14 <filter-mapping>
15 <filter-name>springUtf8Encoding</filter-name>
16 <url-pattern>/*</url-pattern>
17 </filter-mapping>
注解配置:
@Bean
CharacterEncodingFilter characterEncodingFilter(){
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
return filter;
}
spring源码
1 public class CharacterEncodingFilterextends OncePerRequestFilter {
2
3 private String encoding;
4
5 private boolean forceEncoding = false;
6
7
8 /**
9 * Set the encoding to usefor requests. This encoding will be passed into a
10 * {@link javax.servlet.http.HttpServletRequest#setCharacterEncoding} call.
11 * <p>Whether this encoding will overrideexisting request encodings
12 * (and whether it will beapplied as default response encoding as well)
13 * depends on the {@link #setForceEncoding "forceEncoding"} flag.
14 */
15 public void setEncoding(String encoding) {
16 this.encoding = encoding;
17 }
18
19 /**
20 * Set whether theconfigured {@link #setEncoding encoding} of this filter
21 * is supposed to overrideexisting request and response encodings.
22 * <p>Default is "false", i.e. do notmodify the encoding if
23 * {@link javax.servlet.http.HttpServletRequest#getCharacterEncoding()}
24 * returns a non-null value.Switch this to "true" to enforce the specified
25 * encoding in any case,applying it as default response encoding as well.
26 * <p>Note that the response encoding will onlybe set on Servlet 2.4+
27 * containers, sinceServlet 2.3 did not provide a facility for setting
28 * a default responseencoding.
29 */
30 public void setForceEncoding(boolean forceEncoding) {
31 this.forceEncoding = forceEncoding;
32 }
33
34
35 @Override
36 protected void doFilterInternal(
37 HttpServletRequest request, HttpServletResponse response,FilterChain filterChain)
38 throws ServletException, IOException {
39
40 if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
41 request.setCharacterEncoding(this.encoding);
42 if (this.forceEncoding) {
43 response.setCharacterEncoding(this.encoding);
44 }
45 }
46 filterChain.doFilter(request, response);
47 }
48 }
该字符集过滤器有两个重要参数,分别是encoding和forceEncoding
setEncoding
public void setEncoding(java.lang.String encoding)
Set the encodingto use for requests. This encoding will be passed into aServletRequest.setCharacterEncoding(java.lang.String) call.
setForceEncoding
public void setForceEncoding(boolean forceEncoding)
Set whether theconfigured encoding of this filter is supposed to override existing request andresponse encodings.
通过参考文档,我们可以知道:
l.
第一个方法setEncoding()相当于:ServletRequest.setCharacterEncoding(java.lang.String),即设置request编码格式。
2.第二个方法setForceEncoding()的作用是:同时设置ServletResponse和ServletRequest的编码格式。
配置相当于代码中:
resp.setCharacterEncoding("UTF-8");
req.setCharacterEncoding("UTF-8");
在请求处理的过程中我们可以不用考虑编码方面的问题,上面两句代码可以省略,编码统一交给Spring过滤器去处理。
- 另类SEO分享:利用JS封装iframe躲过搜索引擎的抓取
- Linux :MAC 地址克隆方法
- 解决WordPress修改数据库表前缀后无法登陆的问题
- 解决启用WP-Super-Cache后出现的几个问题
- Shell下制作自解压安装包,实现脚本的简单加密
- WordPress(Twenty Ten主题)文章副标题修改教程
- ipvsadm启动报错解决办法,另附ipvsadm详细参数
- Linux:mv 命令的10个实用例子
- Linux优化方法收集与整理
- 常用MySQL语句搜集整理
- ASM 翻译系列第十二弹:ASM Internal amdu - ASM Metadata Dump Utility
- 分享一个Linux无法创建文件夹,但是目录权限却显示正常的问题和解决
- 桌面白屏(Active故障)修复批处理
- ASM 翻译系列第十三弹:ASM 高级知识 - Forcing the issue
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释