Java中过滤器应用一统一处理请求和响应中文乱码
请求/响应中文乱码演示
写一个简单的Servlet进行测试,返回数据的时候,会出现中文乱码如下图所示。有时候请求的数据中如果包含中文,如果没有经过处理,同样会出现中文乱码。
解决办法
出现中文乱码时,就可以考虑统一处理,如果不统一处理,在每一个Servlet中,如果数据返回中有中文,都需要单独处理。写10个Servlet就需要处理10次,处理起来很麻烦,因此最简单的方式就是一次性使用过滤器处理。示例代码如下,
@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
// 统一处理请求和响应编码
req.setCharacterEncoding("UTF-8");
resp.setContentType("application/json;charset=UTF-8");
filterChain.doFilter(req, resp);
}
@Override
public void destroy() {
}
}
再次测试时,结果如下
注意事项:
路径配置的时候,最好不要配置为/*,因为这样配置会导致一个问题,它会拦截所有的请求。包括html页面请求,这时候去请求一个页面,也会返回json格式的数据。如下所示,
因此在配置路径的时候,建议配置为/xxx/*,比如/api/*,然后Servlet中配置路径的时候,多添加一级/api即可。