基础Spring Boot应用所有端点均返回404/白标错误求助
Spring Boot 所有端点返回404的排查方案
核心排查方向及解决办法
包扫描范围问题
你手动添加的@ComponentScan、@EnableJpaRepositories、@EntityScan使用了"com.employee.*"通配符,Spring中该写法仅匹配com.employee下的直接子包,如果控制器所在包是多层嵌套(比如com.employee.controller.v1),可能无法被扫描到。另外@SpringBootApplication本身已经默认扫描主类所在包及其所有子包,手动添加扫描注解反而可能覆盖默认规则,导致扫描范围异常。
解决:移除手动添加的三个扫描注解,仅保留@SpringBootApplication;如果必须指定扫描范围,将包路径改为"com.employee"(会递归扫描所有子包)。确认控制器类的包位置
检查EmployeeController所在的包是否属于com.employee及其子包,若控制器在外部包中,即使配置了扫描规则也无法被Spring识别。查看启动日志的映射注册信息
启动应用时,Spring会在日志中输出所有成功注册的请求映射(格式类似Mapped "{[/employees/healthcheck],methods=[GET]}")。如果没有此类日志,说明控制器未被扫描加载。可临时将日志级别调整为DEBUG,便于排查扫描过程。排查请求拦截配置
检查项目中是否存在自定义的WebMvcConfigurer、过滤器或拦截器,是否存在错误拦截或路由规则,导致请求无法到达控制器。
调整后的主类代码示例
@SpringBootApplication public class EmployeeApplication { public static void main(String[] args) { SpringApplication.run(EmployeeApplication.class, args); } }
或者需指定扫描范围时:
@SpringBootApplication @EnableJpaRepositories(basePackages = "com.employee") @ComponentScan(basePackages = "com.employee") @EntityScan(basePackages = "com.employee") public class EmployeeApplication { public static void main(String[] args) { SpringApplication.run(EmployeeApplication.class, args); } }
内容的提问来源于stack exchange,提问作者p0tta
相关产品推荐
相关产品推荐

