Java中过滤器应用一统一处理请求和响应中文乱码

 

 

请求/响应中文乱码演示

写一个简单的Servlet进行测试,返回数据的时候,会出现中文乱码如下图所示。有时候请求的数据中如果包含中文,如果没有经过处理,同样会出现中文乱码。

 

解决办法

出现中文乱码时,就可以考虑统一处理,如果不统一处理,在每一个Servlet中,如果数据返回中有中文,都需要单独处理。写10Servlet就需要处理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即可。

 

posted @ 2024-03-23 12:14  一只爱阅读的程序员  阅读(93)  评论(0编辑  收藏  举报