Spring Boot多模块REST应用调用接口返回404错误排查求助
1. 核心问题:组件扫描范围配置错误
你的主启动类RestApiApplication上加的@ComponentScan("com.opus.app")指定仅扫描com.opus.app包下的组件,但你的ClientRestController放在com.opus.restApi.implementations包下,完全不在扫描范围内,Spring无法识别到这个Controller,对应的接口自然不存在,请求就会返回404。
修复方案:
修改启动类的组件扫描配置,两种方案二选一:
- 方案一:如果其他业务模块的组件都放在
com.opus父包下,直接修改扫描范围为父包即可覆盖所有模块的组件:
@ComponentScan("com.opus")
- 方案二:如果仅需要扫描指定包,把restApi包也加入扫描范围:
@ComponentScan(basePackages = {"com.opus.app", "com.opus.restApi"})
如果没有特殊配置需求,也可以直接删除额外加的@ComponentScan注解,@SpringBootApplication默认会扫描启动类所在包(com.opus.restApi)及其子包下的所有组件,刚好覆盖你的Controller所在路径。
2. 次要问题:Spring Boot版本冲突
你父pom中继承的spring-boot-starter-parent版本是2.3.3.RELEASE,但后面所有显式引入的Spring Boot依赖(spring-boot-starter、spring-boot-starter-web等)都单独指定了2.5.6版本,跨大版本混用会导致未知的运行时异常,也可能间接影响接口映射逻辑。
修复方案:
删除所有显式指定的Spring Boot依赖的version属性,统一使用parent定义的版本,或者把parent的版本升级到2.5.6保持一致即可。
验证方式
修复后启动项目,查看控制台启动日志中的RequestMapping映射信息,会出现"/auth/client"的GET接口映射记录,此时访问http://localhost:8080/api/opus/auth/client就能正常返回结果。
内容的提问来源于stack exchange,提问作者Brik000

