【SpringMVC】08 Post请求乱码

这是以Post请求方式接受来的中文字符乱码

就像之前JavaWeb阶段的情况一样

 

所以,按照JavaWeb的方法,我们应该只需要在获取之前设置好编码处理就行了

可以先从这个处理方法开始试试,但是参数在编码之前就已经获取了,所以这样是没有用的

 

于是测试第二种方法,因为所有的请求都会被过滤器最先拦截下来,再放行给Servlet程序

这里本来想使用注解的,但是好像没有API支持吧,用不了就还是老办法XML配置

package cn.dai.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * @author ArkD42
 * @file SpringMVC
 * @create 2020 - 05 - 07 - 14:38
 */

public class EncodingFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("UTF-8");
        // 一般来说返回数据不会出现什么乱码
        // servletResponse.setCharacterEncoding("UTF-8");

        // 不要忘记放行请求哦
        filterChain.doFilter(servletRequest, servletResponse);
    }

    public void destroy() {

    }
}

 

web.xml的配置

<!-- 还需要在配置一下注册到Web中-->
    <filter>
        <filter-name>EF</filter-name>
        <filter-class>cn.dai.filter.EncodingFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>EF</filter-name>
        <!-- / 不能过滤,必须是/* -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

访问测试成功,中文获取正常

 

要注意的是过滤器的路径配置【也成为路由配置】不可以单写反斜杠

否则过滤的只是单个工程首页的过滤,应该写反斜杠 + 通配符星号

 

这个过滤器我们可以自己写,也可以交给SpringMVC的过滤器来完成

我们只需要配置web.xml即可

【这个过滤器也一样,路由要写成 / *,否则也会失效】

    <filter>
        <filter-name>SpringMVC EF</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>
    </filter>

    <filter-mapping>
        <filter-name>SpringMVC EF</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

posted @ 2020-05-07 14:55  emdzz  阅读(244)  评论(0编辑  收藏  举报