一、前言
通过在项目的web.xml配置springframework的spring-web包中的org.springframework.web.filter.CharacterEncodingFilter类,将中文请求入参强制转换为指定的字符集编码如UTF-8,参见配置详情。
二、配置说明
1. 项目web.xml配置增加如下filter、filter-mapping项
<filter>@b@ <filter-name>Set Character Encoding</filter-name>@b@ <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>@b@ <init-param>@b@ <param-name>encoding</param-name>@b@ <param-value>UTF-8</param-value>@b@ </init-param>@b@ </filter>@b@ <filter-mapping>@b@ <filter-name>Set Character Encoding</filter-name>@b@ <url-pattern>/*</url-pattern>@b@ </filter-mapping>
2. CharacterEncodingFilter类源码
package org.springframework.web.filter;@b@@b@import java.io.IOException;@b@import javax.servlet.FilterChain;@b@import javax.servlet.ServletException;@b@import javax.servlet.http.HttpServletRequest;@b@import javax.servlet.http.HttpServletResponse;@b@import org.springframework.util.Assert;@b@@b@public class CharacterEncodingFilter extends OncePerRequestFilter@b@{@b@ private String encoding;@b@ private boolean forceRequestEncoding;@b@ private boolean forceResponseEncoding;@b@@b@ public CharacterEncodingFilter()@b@ {@b@ this.forceRequestEncoding = false;@b@@b@ this.forceResponseEncoding = false;@b@ }@b@@b@ public CharacterEncodingFilter(String encoding)@b@ {@b@ this(encoding, false);@b@ }@b@@b@ public CharacterEncodingFilter(String encoding, boolean forceEncoding)@b@ {@b@ this(encoding, forceEncoding, forceEncoding);@b@ }@b@@b@ public CharacterEncodingFilter(String encoding, boolean forceRequestEncoding, boolean forceResponseEncoding)@b@ {@b@ this.forceRequestEncoding = false;@b@@b@ this.forceResponseEncoding = false;@b@@b@ Assert.hasLength(encoding, "Encoding must not be empty");@b@ this.encoding = encoding;@b@ this.forceRequestEncoding = forceRequestEncoding;@b@ this.forceResponseEncoding = forceResponseEncoding;@b@ }@b@@b@ public void setEncoding(String encoding)@b@ {@b@ this.encoding = encoding;@b@ }@b@@b@ public String getEncoding()@b@ {@b@ return this.encoding;@b@ }@b@@b@ public void setForceEncoding(boolean forceEncoding)@b@ {@b@ this.forceRequestEncoding = forceEncoding;@b@ this.forceResponseEncoding = forceEncoding;@b@ }@b@@b@ public void setForceRequestEncoding(boolean forceRequestEncoding)@b@ {@b@ this.forceRequestEncoding = forceRequestEncoding;@b@ }@b@@b@ public boolean isForceRequestEncoding()@b@ {@b@ return this.forceRequestEncoding;@b@ }@b@@b@ public void setForceResponseEncoding(boolean forceResponseEncoding)@b@ {@b@ this.forceResponseEncoding = forceResponseEncoding;@b@ }@b@@b@ public boolean isForceResponseEncoding()@b@ {@b@ return this.forceResponseEncoding;@b@ }@b@@b@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)@b@ throws ServletException, IOException@b@ {@b@ String encoding = getEncoding();@b@ if (encoding != null) {@b@ if ((isForceRequestEncoding()) || (request.getCharacterEncoding() == null))@b@ request.setCharacterEncoding(encoding);@b@@b@ if (isForceResponseEncoding())@b@ response.setCharacterEncoding(encoding);@b@ }@b@@b@ filterChain.doFilter(request, response);@b@ }@b@}