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

Spring Boot应用部署Tomcat出现404 Not Found问题求助

排查Spring Boot REST Controller返回404(Tomcat启动正常但方法未执行)的核心方案

看起来你遇到的是典型的Spring Boot Controller未被正确扫描的问题——Tomcat启动正常,但请求完全找不到对应的处理方法,连Controller里的日志都没输出,说明这个Controller实例根本没被Spring上下文初始化。我给你整理几个最关键的排查步骤,按顺序来应该能定位问题:

1. 先确认@SpringBootApplication的包扫描范围

Spring Boot默认会自动扫描**@SpringBootApplication所在包及其所有子包**里的Bean。你的Application类在app包下,那得看你的CharacterController是不是在app的子包(比如app.controller)里:

  • 如果Controller在app同级的独立包(比如直接叫controller),那必须手动指定扫描范围,比如:
    @SpringBootApplication(scanBasePackages = {"app", "controller"})
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    
  • 或者用scanBasePackageClasses更精准地指定要扫描的类:
    @SpringBootApplication(scanBasePackageClasses = {Application.class, CharacterController.class})
    

2. 检查Controller的注解是否完全正确

别小看这个,很多时候都是细节错了:

  • 确保Controller类上标注了@RestController(REST接口专用,自带@Controller + @ResponseBody),如果只标了@Controller,那方法上必须加@ResponseBody才能返回JSON/文本,否则会去查找视图,自然返回404。
  • 检查方法上的请求映射注解(@GetMapping/@PostMapping/@RequestMapping)的路径是否和你请求的URL完全匹配,比如你写的是@GetMapping("/characters"),那请求必须是http://localhost:8080/characters,别多写或少写斜杠,也别搞混了大小写。

3. 验证pom.xml的依赖是否完整

构建REST应用必须确保引入了spring-boot-starter-web依赖,它包含了Spring MVC和内嵌Tomcat的所有必要组件:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

如果之前手动引入了Tomcat的独立依赖,反而可能和Spring Boot的内嵌Tomcat冲突,建议删掉手动添加的Tomcat依赖,让starter-web自动管理。

4. 查看控制台的Bean注册日志

开启DEBUG级别的日志,就能清楚看到Spring有没有初始化你的CharacterController:

  • 在application.properties里添加:
    logging.level.org.springframework=DEBUG
    
  • 重启应用后,搜索你的Controller类名(比如CharacterController),如果找不到任何关于这个类的Bean注册日志,那肯定是扫描范围的问题;如果能找到,再看请求映射的路径是否正确。

5. 检查是否有其他配置类干扰扫描

比如你的DatabaseConfig类,如果上面加了@ComponentScan注解,可能会覆盖@SpringBootApplication自带的扫描配置。记住:@SpringBootApplication已经包含了@ComponentScan、@Configuration和@EnableAutoConfiguration三个注解,不需要在其他配置类上重复加@ComponentScan,除非你明确要自定义扫描规则。

6. 确认启动方式正确

必须通过Spring Boot的启动类(Application类的main方法)来启动应用,而不是直接用Tomcat插件或者外部Tomcat容器启动。只有通过SpringApplication.run启动,Spring才会正确初始化上下文,扫描所有指定的Bean。

按照这个顺序排查,大概率能找到问题所在——毕竟这种404但Tomcat正常的情况,90%以上都是包扫描范围不对或者注解配置遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:39:52