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

跟随freeCodeCamp SpringBoot教程,Postman请求返回404而非200

Spring Boot接口返回404问题排查方案

问题概述

按照freeCodeCamp的Spring Boot入门教程开发,Postman请求接口始终返回404状态码(预期200)。已尝试为多包结构添加@ComponentScan注解、核对Postman请求配置、更换电脑重建项目,问题仍未解决。

可能原因

  1. 控制器缺失或注解错误

    • 未创建标注@RestController/@Controller的类,或类上注解遗漏
    • 控制器所在包未被Spring Boot扫描(即便加了@ComponentScan,也可能扫描路径配置错误)
  2. 请求路径不匹配

    • 控制器方法的@RequestMapping/@GetMapping/@PostMapping路径与Postman请求路径不一致(比如大小写、斜杠多/少、路径参数拼写错误)
    • 项目配置了server.servlet.context-path,但请求时未带上上下文路径
  3. 依赖问题

    • 未引入spring-boot-starter-web依赖,导致Web MVC组件未加载,无法处理HTTP请求
    • 依赖版本冲突,引发Web功能异常
  4. 启动类位置错误

    • 主启动类未放在所有业务包的父包下,自动扫描范围不包含控制器、服务等组件;手动添加的@ComponentScan路径覆盖了默认扫描范围但未包含必要包
  5. 请求方法不匹配

    • 控制器定义的是@PostMapping但用了GET请求,或反之(部分场景下方法不匹配会被返回404而非405)

解决步骤

1. 检查控制器代码

确认存在标注@RestController的控制器类,且方法上的请求映射注解正确。示例:

@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserService userService;

    // 构造注入(推荐)
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> listAllUsers() {
        return userService.getAllUsers();
    }
}

2. 验证组件扫描范围

  • 若主启动类不在业务包的父包下,需确保@ComponentScan的basePackages包含所有需要扫描的包:
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.controller", "com.example.service", "com.example.repository"})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  • 更简单的方式是将主启动类移到所有业务包的父包下(比如com.example),Spring Boot会自动扫描所有子包

3. 核对请求配置

  • 把控制器注解中的路径原封不动复制到Postman,确保路径完全一致(包括斜杠、大小写)
  • 确认Postman的请求方法(GET/POST)与控制器方法的注解完全匹配
  • 若配置了server.servlet.context-path,请求路径需带上该前缀,比如配置为/demo,则请求URL应为http://localhost:8080/demo/api/users

4. 检查依赖配置

  • 确认pom.xml(Maven)或build.gradle(Gradle)中包含spring-boot-starter-web依赖:
    Maven:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Gradle:

implementation 'org.springframework.boot:spring-boot-starter-web'
  • 执行清理构建命令(Maven:mvn clean install;Gradle:./gradlew clean build),确保依赖下载完整无损坏

5. 分析启动日志

  • 查看项目启动日志,确认是否存在Mapped "{[/api/users],methods=[GET]}"这类映射成功的日志
  • 若没有映射日志,说明控制器未被扫描到,重新检查扫描范围或控制器注解

6. 调试请求

  • 在控制器方法中添加日志或断点,确认请求是否到达控制器
  • 用浏览器直接访问GET请求路径,排除Postman自身配置问题(比如Headers设置错误)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:05:26