代码方式配置springmvc的字符集过滤器

之前一直用的xml方式配置

<filter>
        <filter-name>encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
<filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

一直不知道代码怎么配置,现在有了,那就是注册过滤器

// 继承AbstractAnnotationConfigDispatcherServletInitializer
@Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        String filterName = "myfilter";
     // new CharacterEncodingFilter()是自己创建的一个过滤器的对象 FilterRegistration.Dynamic filterRegistration
= servletContext.addFilter(filterName, new CharacterEncodingFilter()); filterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*"); //父类的方法一定要调用,否则getRootConfigClasses与getServletConfigClasses等方法都会失效 super.onStartup(servletContext); }

我们看下效果图:

我把原先的xml配置删除但是不加上这个onStartup,

在一个form表单中,我使用了注解校验@Length(max=4),结果我只输入了两个字,就提示长度超过

然后只填入一个字,成功提交了,显示出来的数据和数据的数据都是:

我们再加上代码配置:经我测试,成功了。

贴上过滤器的代码:

public class CharacterEncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setCharacterEncoding("UTF-8");
      // 这句话是要的,不然界面进不去 filterChain.doFilter(servletRequest, servletResponse); } @Override
public void destroy() { } }

第一种注册过滤器就是上方这种,下面介绍第二种注册过滤器,我没有试过

//================注册过滤器的方法一:利用getServletFilters与registerServletFilter,两者结合一起完成========

    /**
     * 这个方法注册的filter就是给DispatcherServlet用的,它的方式是让注册器关联到servlet
     * @return
     */
    /*@Override
    protected Filter[] getServletFilters() {
        return new Filter[]{new MyFilter()};
    }*/

    /**
     * 这个方法具体完成过滤器的注册工作,如果需要自定义注册设置,比如设置其urlPattern,而不是保留关联到DispatcherServlet的话
     * 就需要重写这个方法,
     * @param servletContext
     * @param filter
     * @return
     */
    /*@Override
    protected FilterRegistration.Dynamic registerServletFilter(ServletContext servletContext, Filter filter) {
        //这几行代码是自定义过滤器的注册配置
        String filterName = "myfilter";
        FilterRegistration.Dynamic filterRegistration = servletContext.addFilter(filterName, filter);
        filterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");

       return filterRegistration;
    }*/
原文地址:https://www.cnblogs.com/woyujiezhen/p/12106072.html