You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot引入Maven公共模块的REST Controller访问报404如何解决?

这种将公共Controller、通用配置封装到独立Maven模块的需求是完全可实现的,也是企业级开发中非常常见的公共组件封装实践,不存在不推荐的问题。404问题的本质是公共模块的Controller没有被Spring扫描注册到应用上下文中。

核心原因

Spring Boot 默认只会扫描启动类所在包及其子包下的Bean(包括Controller、Service等),你的common-crud模块的包路径和app-client启动类的包路径不匹配,因此公共模块里的Controller没有被注入到Spring容器中,自然无法响应请求。

解决方案

可根据使用场景二选一:

方案1:手动指定扫描路径(适合单项目快速适配)

在app-client的启动类上,补充@ComponentScan注解,同时指定业务项目和公共模块的包路径:

@SpringBootApplication
// 替换为你实际的业务包、公共模块根包路径
@ComponentScan(basePackages = {"com.mainapp", "com.common.crud"})
public class AppClientApplication extends SpringBootServletInitializer {
    // 启动类原有逻辑
}

如果你还在公共模块中封装了JPA Repository、实体类、SpringSecurity配置等,还需要同步补充对应注解的扫描路径:

  • JPA Repository:追加@EnableJpaRepositories(basePackages = {"com.mainapp.repository", "com.common.crud.repository"})
  • 实体类:追加@EntityScan(basePackages = {"com.mainapp.entity", "com.common.crud.entity"})

方案2:自动装配(适合公共组件给多项目复用,无侵入)

这种方案不需要业务项目修改任何配置,引入依赖即可自动生效,更符合Spring Boot的设计理念:

  1. 在common-crud模块的src/main/resources下新建META-INF目录,创建spring.factories文件,写入以下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.common.crud.config.CommonCrudAutoConfig
  1. 在common-crud模块中创建自动配置类CommonCrudAutoConfig.java:
package com.common.crud.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
// 替换为公共模块的根包路径
@ComponentScan(basePackages = "com.common.crud")
public class CommonCrudAutoConfig {
    // 如果有SpringSecurity等其他公共配置,也可以在这个类里声明或者导入
}

完成后重新打包common-crud模块,app-client无需修改任何代码,重新打包部署即可访问公共模块的接口。

SpringSecurity适配场景补充建议

多类型认证能力的封装完全可以基于上述自动装配方案实现:
不同认证方式的配置类分别封装,通过@ConditionalOnProperty注解实现开关控制,示例如下:

@Configuration
@ConditionalOnProperty(name = "security.auth.type", havingValue = "saml")
public class SamlSecurityConfig {
    // SAML认证配置逻辑
}

@Configuration
@ConditionalOnProperty(name = "security.auth.type", havingValue = "jwt")
public class JwtSecurityConfig {
    // JWT认证配置逻辑
}

业务项目只需要在配置文件中指定security.auth.type=saml即可自动加载对应认证配置,不需要修改代码。

额外注意事项
  • 公共模块的Controller需要确保加了@RestController/@Controller注解,避免漏注无法被扫描。
  • 建议公共模块的接口统一加前缀(比如/common/),避免和业务项目的接口路径冲突。
  • 若Tomcat配置的上下文根为mainapp,实际访问路径应为http://localhost:8080/mainapp/sayHelloFromModule,注意不要写错上下文根。

内容的提问来源于stack exchange,提问作者CoderJammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:57:03