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

