普通的请求乱码 需要在web.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> <!-- 根据源码 想要配置的编码有效必须设置 encoding和forceEncoding的值 -->
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
org.springframework.web.filter.CharacterEncodingFilter的源码
private String encoding;
private boolean forceEncoding = false;
@Override
protected void doFilterInternal(
HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
request.setCharacterEncoding(this.encoding);
if (this.forceEncoding) {
response.setCharacterEncoding(this.encoding);
}
}
filterChain.doFilter(request, response);
}
上图的意思是指定的encoding的字符集,那么使用该字符集有两个条件,1.forceEncoding为true,2.代码中没有指定字符集,所以我们要在字符集过滤器中给forceEncoding赋值。