之前一直用的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; }*/