1、什么是WebMvcConfigurer?
WebMvcConfigurer 是 Spring 5 引入的一个接口,它用于在 Spring MVC 中自定义配置。通过实现这个接口,你可以对 Spring MVC 的行为进行高度定制,提供一种方式来修改 Spring MVC 默认的配置,而不需要直接修改 web.xml 或者通过 DispatcherServlet 配置文件。
2、主要应用场景
2.1、 注册拦截器(Interceptors)
1、自定义拦截器实现 HandlerInterceptor
public class MyInterceptor implements HandlerInterceptor {// 请求到达处理器之前调用,返回true表示继续处理,返回false表示拦截请求@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("Pre-handle: 请求开始之前...");// 这里可以做权限验证、日志记录等return true; // 继续执行请求}// 请求处理后,视图渲染之前@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("Post-handle: 请求处理之后...");// 这里可以修改模型数据,添加数据到视图等}// 请求处理完成后,渲染视图之后执行,通常用于清理资源@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("After-completion: 请求完成之后...");// 这里可以进行资源清理等工作}
}
2、通过实现 addInterceptors 方法,你可以注册一个或多个拦截器。
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor()) // 注册自定义的拦截器.addPathPatterns("/**") // 拦截所有请求.excludePathPatterns("/login", "/static/**"); // 排除某些路径}
}
2.2、配置静态资源处理(Static Resources Handling)
使用 addResourceHandlers 方法,你可以为静态资源配置处理规则,指定静态资源的访问路径。
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); // 配置静态资源的目录
}
2.3、跨域配置(CORS)
使用 addCorsMappings 方法,你可以配置允许跨域请求的路径和相关设置。
@Override
public void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 所有路径.allowedOrigins("http://localhost:8080") // 允许的来源.allowedMethods("GET", "POST") // 允许的请求方法.allowedHeaders("*"); // 允许的请求头
}
2.4、配置视图解析器(View Resolver)
你可以通过 configureViewResolvers 方法来配置 Spring MVC 的视图解析器。
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {registry.jsp().prefix("/WEB-INF/views/").suffix(".jsp"); // 配置 JSP 视图解析器
}
2.5、配置消息转换器(Message Converters)
通过 configureMessageConverters 方法,你可以定制 HTTP 消息转换器,例如 JSON 和 XML 的转换。
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(new MappingJackson2HttpMessageConverter()); // 添加 Jackson 解析器来处理 JSON
}
2.6、添加格式化器和转换器(Formatters and Converters)
通过 addFormatters 方法,你可以添加自定义的格式化器和转换器。
@Override
public void addFormatters(FormatterRegistry registry) {registry.addConverter(new MyCustomConverter()); // 添加自定义的转换器
}
3、总结
WebMvcConfigurer 是 Spring 5 引入的一个接口,它用于定制 Spring MVC 的行为,使得开发者能够更加灵活地修改和扩展 Spring MVC 默认的配置。
它提供了多种方法,可以定制拦截器、视图解析器、静态资源处理、消息转换器、CORS 配置等。
使用 WebMvcConfigurer 可以让你无需修改 Spring 源代码,就能轻松定制 Spring MVC 的行为。
在 Spring Boot 中,@Configuration 注解的配置类通常实现 WebMvcConfigurer 来进行这些配置。