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

@Configuration注解对应实现implements WebMvcConfigurer的配置不生效问题。

检查项目是否有其他配置实现了 extends WebMvcConfigurationSupport,如果有就是这个配置导致实现implements WebMvcConfigurer的配置不生效。

我的问题项目有imgconfig,和webconfig


@Configuration
public class ImgConfig extends WebMvcConfigurationSupport {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {String property = System.getProperty("user.dir").concat(File.separator);System.err.println("映射地址:"+property);registry.addResourceHandler("/**").addResourceLocations("file:"+property);}}


@Configuration
public class WebConfig implements WebMvcConfigurer {@Resourceprivate CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver;@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {resolvers.add(currentUserMethodArgumentResolver);}
}

我在下面代码处打断点 ,重启程序发现没有执行,由此判断webconfig的add没有执行。

resolvers.add(currentUserMethodArgumentResolver);

问题原因:Spring Boot 的 WebMvcAutoConfiguration 自动配置类通过条件注解 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) 判断是否生效。如果存在继承 WebMvcConfigurationSupport 的类(如 ImgConfig),所有默认的 MVC 配置会被禁用,包括其他 WebMvcConfigurer 实现类的配置。

解决方案1:统一使用 WebMvcConfigurer

ImgConfig 改为实现 WebMvcConfigurer 接口,避免继承 WebMvcConfigurationSupport

所有配置类均通过 WebMvcConfigurer 实现,Spring 会自动合并多个配置类的逻辑

@Configuration
public class ImgConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {String property = System.getProperty("user.dir").concat(File.separator);registry.addResourceHandler("/**").addResourceLocations("file:" + property);}
}

解决方案2:合并配置到一个类

@Configuration
public class CombinedConfig implements WebMvcConfigurer {@Resourceprivate CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver;@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {String property = System.getProperty("user.dir").concat(File.separator);registry.addResourceHandler("/**").addResourceLocations("file:" + property);}@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {resolvers.add(currentUserMethodArgumentResolver);}
}

相关文章:

  • AI写代码之GO+Python写个爬虫系统
  • Web3实战:从零开发你的ERC20代币合约
  • Idea 配置 Git
  • C++——多态、抽象类和接口
  • LLM 论文精读(一)Scaling Laws for Neural Language Models
  • 【Spring】静态代理、动态代理
  • 告别 Transformer:Mamba 模型如何实现线性时间序列建模
  • 如何在 Ansys Icepak AEDT 中设置多个流程以加快仿真速度?
  • AGI大模型(12):向量检索之关键字搜索
  • 乐视系列玩机------乐视2 x620红灯 黑砖刷写教程以及新版刷写工具的详细释义
  • GSAP 动画引擎实战:打造丝滑动效交互组件库
  • 百度 Al 智能体心响 App 上线
  • 探秘 SenseGlove Nova 2力反馈手套,解锁 VR 键盘交互新方式
  • 高并发秒杀使用RabbitMQ的优化思路
  • 1.3 本书结构概览:从理论基础到实践案例的系统阐述
  • Python3中使用jupyter notebook
  • 美乐迪电玩大厅加载机制与 RoomList 配置结构分析
  • 给vue-admin-template菜单栏 sidebar-item 添加消息提示
  • WHAT - 静态资源缓存穿透
  • 蓝耘平台介绍:算力赋能AI创新的智算云平台
  • 载人登月总体进展顺利
  • 杭州萧山区两宗地块收金约44.73亿元,最高溢价率74.4%
  • 马上评|治理计量不准确收费不规范,水电气要有明白账
  • 王忠诚出任四川遂宁代市长,此前为成都市政府秘书长
  • 山西公布商标侵权典型案例:一工厂生产价值三百多万假“维达”纸被查
  • 机器人马拉松背后的五大启示:未来社会与机器人的深度融合