zoukankan      html  css  js  c++  java
  • 代码方式配置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;
        }*/
  • 相关阅读:
    loads和dumps的用法
    python实现装饰器
    pycharm 配置 git 方法
    正则表达式——练习一
    fiddler下载安装
    robotframework引入seleniumlibrary报错
    Codeforces-936B Sleepy Game
    Codeforces-940D. Alena And The Heater
    Codeforces-935D. Fafa and Ancient Alphabet
    Java编程规范
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/12106072.html
Copyright © 2011-2022 走看看