Spring boot 子模块不同包名下controller接口404问题解决方案

项目背景,在做项目时使用了一套别人的Spring boot三方开源系统当基础框架,然后在此系统基础上增加子模块,书写新的controller接口和业务逻辑。项目结构如下图:

system是@SpringBootApplication标注类所在的主工程模块,statistics是我建立的子模块,我在该子模块下建立了controller接口,也进行了注解,但是启动后访问该接口,提示404错误找不到该接口。

 

经过排查解决过程如下:

1、@SpringBootApplication标注类一定要增加@ComponentScan标注,标识主模块包名+子模块包名

2、务必在主模块pom.xml中依赖子模块,网上很多教程根本没说这一步,只说使用@ComponentScan标注,只使用@ComponentScan标注,亲测无效!

 3、@ComponentScan标注了,主模块pom.xml把子模块也导入后,务必刷新maven依赖,否则还是不会生效,不要以为直接run就可以了,我就是被这里坑了一下午,点击Reload project 

 

 4、这时可以运行了,各位可以看到,一个完全不同包名的子模块下的controller接口,在swagger中显示出来了,打完收工! 

 

5、原理性的东西补充一下,Spring Boot在进行组件扫描时

5.1 如果你的其他包层次结构位于使用@SpringBootApplication标注主应用程序下方,则隐式组件扫描将自动涵盖。也就是说,不要明确标注@ComponentScan,Spring Boot会自动搜索当前应用主入口目录及其下方子目录。
5.2 如果其他包中的bean /组件不在当前主包路径下面,,则应手动使用@ComponentScan 添加,指定需要扫描的路径,他就会完全按你指定的路径进行扫描,所以你必须指定主工程、子模块所有的包名
5.3 如果使用了@ComponentScan ,那么Spring Boot就全部依赖你的定义,如果定义出错,会出现autowired时出错,报a bean of type that could not be found错误,让你很恼火哦。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值