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

Spring Boot REST API返回404 Not Found问题排查求助

Spring Boot REST API 404 问题排查

问题描述

我是Spring Boot新手,尝试开发一个简单的REST API服务,编写了一个返回字符串的接口,但在Postman中始终收到404 Not Found响应。我确认请求URL正确且已在类上添加@RestController注解,虽知晓当前接口实现不规范,但仅为测试用途,不知为何出现404问题。项目结构为:src/main/java/com/example/demo下包含启动类DemoApplication.java,同级目录下有controller文件夹,PhotoController.java位于该文件夹中。

控制器代码

@RestController
public class PhotoController {
    @GetMapping(path = "/api/photos", produces = "application/json")
    public String getAll(){
        return "finito";
    }
}

pom.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.persistence</groupId>
            <artifactId>jakarta.persistence-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

application.properties 配置

debug = true
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/photos
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql: true
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=drop-and-create
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql
spring.jpa.properties.javax.persistence.schema-generation.scripts.drop-target=drop.sql
spring.jpa.properties.hibernate.format.sql=true

排查方向

  1. 启动类扫描范围:Spring Boot默认扫描启动类所在包及其子包。如果启动类DemoApplication在com.example.demo包,控制器在com.example.demo.controller属于子包,扫描逻辑正常;若控制器在其他路径,需在启动类添加@ComponentScan(basePackages = "控制器所在包全路径")指定扫描范围。
  2. 请求URL匹配:确认Postman请求为GET http://localhost:8080/api/photos(默认端口8080),注意路径大小写、是否有多余斜杠;若配置了server.servlet.context-path,需在URL前加上该前缀。
  3. 组件初始化日志:查看启动日志,若存在Mapping GET "/api/photos" to public java.lang.String com.example.demo.controller.PhotoController.getAll()这类日志,说明控制器已被加载;无此日志则表示控制器未被扫描到。
  4. 依赖完整性:确认spring-boot-starter-web依赖已正确引入,该依赖是Spring MVC运行的基础,可检查Maven依赖是否下载完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:37:02