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

@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);}
}

http://www.xdnf.cn/news/1065.html

相关文章:

  • Java实例化对象都有几种方式
  • React 单一职责原则:优化组件设计与提高可维护性
  • 马浩棋:产通链CT-Chain 破局不动产 RWA,引领数智金融新变革
  • 程序生成随机数
  • 什么是API
  • 数智读书笔记系列030《曲折的职业道路:在终身工作时代找准定位》与《做自己的教练:战胜工作挑战掌控职业生涯》
  • 离线-DataX
  • 【AI微信小程序开发】大转盘小程序项目代码:自设转盘选项和概率(含完整前端+后端代码)
  • 刷题之路:C++ 解题分享与技术总结
  • Yocto项目实战教程-第7章定制镜像菜谱与内核菜谱-7.2小节-定制应用程序
  • 眼镜眨巴眨巴-一步几个脚印从头设计数字生命2——仙盟创梦IDE
  • OpenHarmony OS 5.0与Android 13显示框架对比
  • 【python】如何将文件夹及其子文件夹下的所有word文件汇总导出到一个excel文件里?
  • 操作系统-用户级-内核级线程
  • 西门子地址表规划中,如WM200与WM201这样相邻地址冲突问题
  • 工厂模式:工厂方法模式 和 抽象工厂模式
  • VulnHub-DarkHole_1靶机渗透教程
  • Linux驱动模块双机调试详细步骤
  • Linux学习——UDP
  • PowerQuery逆透视将二维表转换为一维表
  • 【家政平台开发(67)】家政平台移动端性能优化:打造极致用户体验
  • Spring集合注入Bean
  • Oracle数据库学习之路-目录
  • PyTorch与自然语言处理:从零构建基于LSTM的词性标注器
  • Docker离线安装与配置指南
  • 安装 Conda 环境
  • Linux 一些常用的命令记录
  • pdf多文件合并
  • Elasticsearch性能优化实践
  • SQL简介