当前位置: 首页 > news >正文

WebMvcConfigurer配置接口详解

WebMvcConfigurer配置接口详解

在 Spring MVC 中,WebMvcConfigurer 是一个​​核心配置接口​​,用于​​自定义和扩展 Spring MVC 的默认行为​​。它提供了一系列回调方法,允许开发者在不重写完整 MVC 配置类的前提下,灵活添加或修改 MVC 相关的组件(如拦截器、视图解析器、静态资源处理器等)。

一、核心定位:MVC 配置的“扩展点”

Spring MVC 的自动配置(如 WebMvcAutoConfiguration)会默认注册一些基础组件(如 InternalResourceViewResolver 视图解析器、静态资源处理器等)。但实际开发中,我们常需要根据业务需求调整这些配置(例如添加拦截器、修改视图前缀、自定义参数解析器等)。

WebMvcConfigurer 接口的作用就是提供这些​​自定义扩展的入口​​,开发者只需实现该接口并覆盖需要的方法,即可将自定义配置与 Spring MVC 的默认配置融合,避免重复造轮子。

二、核心方法与典型配置场景

WebMvcConfigurer 接口定义了多个方法(Spring 5.0+ 后支持 Java 8 默认方法,只需覆盖需要的方法),以下是最常用的几类配置场景及对应方法:

1. ​​配置视图解析器(View Resolver)​

用于定义如何将逻辑视图名(如 "user")转换为物理视图(如 JSP、Thymeleaf 模板)。
​方法​​:void configureViewResolvers(ViewResolverRegistry registry)

​示例(配置 Thymeleaf 视图解析器)​​:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {// 配置 Thymeleaf 视图解析器(假设已引入 Thymeleaf 依赖)registry.thymeleaf(); // 或自定义 InternalResourceViewResolver(JSP 场景)// registry.jsp("/WEB-INF/views/", ".jsp");}
}
2. ​​添加拦截器(Interceptor)​

用于全局拦截请求,实现权限校验、日志记录、参数预处理等功能。
​方法​​:void addInterceptors(InterceptorRegistry registry)

​示例(添加登录拦截器)​​:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor; // 自定义拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册拦截器,并指定拦截路径和排除路径registry.addInterceptor(loginInterceptor).addPathPatterns("/**")          // 拦截所有请求.excludePathPatterns(            // 排除无需拦截的路径"/login", "/register", "/static/**"                 // 静态资源);}
}
3. ​​配置静态资源处理​

用于定义静态资源(如 CSS、JS、图片)的访问路径和缓存策略。
​方法​​:void addResourceHandlers(ResourceHandlerRegistry registry)

​示例(配置静态资源映射)​​:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 将 /static/** 映射到 classpath:/static/ 目录registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/").setCachePeriod(3600); // 缓存 1 小时(秒)// 支持 Swagger UI 资源(前后端分离项目常用)registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/").resourceChain(false);}
}
4. ​​自定义参数解析器(Argument Resolver)​

用于处理请求参数的自定义解析逻辑(如将请求参数转换为特定对象)。
​方法​​:void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers)

​示例(自定义用户信息参数解析器)​​:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate CurrentUserArgumentResolver currentUserResolver; // 自定义解析器@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {resolvers.add(currentUserResolver); // 添加到解析器列表}
}
5. ​​配置消息转换器(Message Converter)​

用于定义 HTTP 请求/响应的序列化与反序列化方式(如 JSON、XML 格式处理)。
​方法​​:void configureMessageConverters(List<HttpMessageConverter<?>> converters)

​示例(自定义 JSON 消息转换器)​​:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {// 替换默认的 Jackson 转换器为 FastJSON(需引入 FastJSON 依赖)FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter();fastJsonConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));// 清空默认转换器(可选),添加自定义转换器converters.clear();converters.add(fastJsonConverter);}
}
6. ​​配置跨域(CORS)​

用于全局设置跨域资源共享策略。
​方法​​:void addCorsMappings(CorsRegistry registry)

​示例(全局跨域配置)​​:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 所有接口.allowedOrigins("http://localhost:3000") // 允许前端域名.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法.allowedHeaders("*") // 允许的请求头.exposedHeaders("Token") // 允许响应头.maxAge(3600); // 预检请求缓存时间(秒)}
}

三、与 WebMvcConfigurationSupport 的区别

Spring MVC 还提供了 WebMvcConfigurationSupport 类(继承自 WebMvcConfigurerAdapter,已过时),用于更底层的 MVC 配置。但 WebMvcConfigurer 是更推荐的扩展方式,原因如下:

特性WebMvcConfigurerWebMvcConfigurationSupport
​设计目的​扩展默认配置(保留自动配置的默认行为)完全自定义配置(覆盖自动配置的默认行为)
​默认配置​自动生效 Spring Boot 的默认 MVC 配置需手动注册默认组件(如视图解析器、拦截器)
​适用场景​大多数业务扩展(如添加拦截器、配置视图)特殊场景(如完全禁用默认配置,自定义所有组件)

四、在 Spring Boot 中的使用

Spring Boot 引入 spring-boot-starter-web 依赖后,会自动配置一个 WebMvcAutoConfiguration 类,该类通过 WebMvcConfigurer 扩展了默认的 MVC 配置(如静态资源映射、视图解析器等)。

开发者只需创建自己的 @Configuration 类并实现 WebMvcConfigurer,即可将自定义配置与自动配置融合。例如:

@Configuration
public class MyWebConfig implements WebMvcConfigurer {// 覆盖需要的方法,添加自定义配置
}

五、总结

WebMvcConfigurer 是 Spring MVC 提供的​​核心扩展接口​​,通过它可以灵活地自定义 MVC 行为(如拦截器、视图解析器、静态资源处理等),同时保留 Spring Boot 的自动配置能力。它是连接业务需求与 Spring MVC 框架的桥梁,广泛应用于前后端分离项目、权限管理、日志监控等场景。

http://www.dtcms.com/a/307622.html

相关文章:

  • ClickHouse vs PostgreSQL:数据分析领域的王者之争,谁更胜一筹?
  • 模型优化——在MacOS 上使用 Python 脚本批量大幅度精简 GLB 模型(通过 Blender 处理)
  • 【linux驱动开发】Vscode + Remote SSH + clangd + bear=内核源码阅读环境搭建
  • Visual Studio Code (VSCode) 的常用快捷键
  • 33.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--财务服务--记账
  • Shader开发(五)什么是渲染管线
  • 【大模型理论篇】混合思考之自适应思维链
  • day28_2025-07-31
  • 基于京东评论的文本挖掘与分析,使用LSTM情感分析算法以及网络语义分析
  • 【数据结构】算法代码
  • 前端框架Vue3(三)——路由和pinia
  • 分布内侧内嗅皮层的层Ⅱ或层Ⅲ的网格细胞(grid cells)对NLP中的深层语义分析的积极影响和启示
  • vue3.0 +TypeScript 项目中pinia基础语法和使用
  • 【大数据】open_metadata 开源元数据管理平台建设与数据血缘实践
  • 「源力觉醒 创作者计划」开源大模型重构数智文明新范式
  • AI任务相关解决方案12-NLP的15项任务大融合系统:传统NLP与Qwen大模型的深度结合
  • NTLDR源代码分析之从GetSector函数到blread函数
  • 解决 IntelliJ IDEA Build时 Lombok 不生效问题
  • 商旅平台怎么选?如何规避商旅流程中的违规风险?
  • 【未解决】STM32无刷电机驱动电路问题记录
  • .NET Core部署服务器
  • 智慧收银系统开发进销存库存统计,便利店、水果店、建材与家居行业的库存汇总管理—仙盟创梦IDE
  • Spring Boot 异常处理:从全局捕获到优化用户体验!
  • PostgreSQL面试题及详细答案120道(01-20)
  • 解放双手!Report Distro 实现报表自动化分发
  • 微软发布Microsoft Sentinel数据湖国际版
  • SecurityContextHolder 管理安全上下文的核心组件详解
  • 【STM32】HAL库中的实现(一)GPIO/SysTick/EXTI
  • 【运维基础】Linux 计划任务管理
  • AI 安监系统:为工业园安全保驾护航