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

部署SpringBoot测试API至Tomcat后调用出现404错误求助

问题排查与解决步骤

1. 检查组件扫描配置

确保SpringBoot主启动类能扫描到PersonController:

  • 主启动类的包路径需包含Controller所在包,比如主启动类在com.example.demoApp,Controller应放在com.example.demoApp.controller或其子包下。
  • 若包结构不符合,在主启动类上添加@ComponentScan(basePackages = {"你的Controller所在包路径"})。

2. 修正实体类大小写问题

代码中所有person应改为Person(实体类首字母大写),示例修正如下:

@PostMapping
public void addPerson(@Valid @NonNull @RequestBody Person person) {
    personService.addPerson(person);
}

@GetMapping(path = "{id}")
public Person getPersonById(@PathVariable("id") UUID id) {
    return personService.getPersonById(id)
            .orElse(null);
}

大小写错误可能导致Spring无法正确解析请求体或返回值,间接影响路由映射的识别。

3. 确认WAR包部署配置

如果是打包成WAR部署到Tomcat,需确保SpringBoot项目配置正确:

  • 主启动类继承SpringBootServletInitializer并重写configure方法:
@SpringBootApplication
public class DemoAppApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoAppApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoAppApplication.class, args);
    }
}
  • pom.xml中设置打包方式为WAR,并排除内置Tomcat避免冲突:
<packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 添加对应Tomcat版本的servlet API依赖 -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>9.0.80</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

4. 验证请求路径与方法匹配

  • 确保请求路径完全匹配:http://localhost:8080/demoApp/api/v1/person
    • GET请求:对应getAllPeople()方法,无需参数
    • POST请求:需携带符合Person结构的JSON请求体
    • 带ID的GET请求:http://localhost:8080/demoApp/api/v1/person/{UUID}
  • 使用Postman或curl测试不同请求方法,排除客户端请求方式错误导致的问题。

5. 查看Tomcat日志

检查Tomcat的logs/catalina.out或localhost.log,确认PersonController的映射是否被正确注册。日志中会显示类似内容:

Mapped "{[/api/v1/person],methods=[GET]}" onto public java.util.List<com.example.demoApp.model.Person> com.example.demoApp.controller.PersonController.getAllPeople()

如果没有这类日志,说明Controller未被正确加载。

内容的提问来源于stack exchange,提问作者Việt Thắng Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:42:44