Spring Boot API端点/retrieveAll访问返回404错误求助
Spring Boot API端点返回404 Not Found问题排查
访问http://localhost:8081/contacts/retrieveAll始终返回404,控制台日志显示无GET /contacts/映射,结合你提供的代码,重点排查以下几个方向:
1. Controller未被Spring扫描到
Spring Boot默认只扫描启动类所在包及其子包下的组件。如果你的AddressBookController不在AddressBookSampleApplication所在的包(比如it.unicredit.demo)或其子包内,Spring不会识别这个Controller。
解决办法:
- 把
AddressBookController移到启动类的子包下(比如it.unicredit.demo.controller); - 或者在启动类上添加
@ComponentScan指定扫描范围:
@SpringBootApplication @ComponentScan(basePackages = {"it.unicredit.demo.controller", "it.unicredit.demo.repository"}) public class AddressBookSampleApplication { public static void main(String[] args) { SpringApplication.run(AddressBookSampleApplication.class, args); } }
2. Controller类语法不完整
你提供的AddressBookController代码缺少闭合的大括号,这会导致类定义无效,Spring无法将其注册为Bean:
修正后完整代码:
@RestController @RequestMapping("/contacts") public class AddressBookController { @Autowired private PersonRepository personRepository; @GetMapping("/retrieveAll") public ResponseEntity<?> retrieveContacts() { List<Person> contacts = personRepository.findAll(); if (contacts.isEmpty()) return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Nobody found in the address book."); return ResponseEntity.ok(contacts); } } // 补充闭合大括号
3. 依赖冲突或冗余
你的POM里同时引入了spring-boot-starter-data-jdbc和spring-boot-starter-data-jpa,两者可能存在自动配置冲突;另外jakarta.persistence-api属于冗余依赖(spring-boot-starter-data-jpa已包含相关API),版本不一致可能导致上下文初始化异常。
修正后的POM依赖部分:
<dependencies> <!-- 移除spring-boot-starter-data-jdbc,避免与JPA冲突 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </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>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> <!-- 移除冗余的jakarta.persistence-api依赖 --> </dependencies>
验证步骤
修改后重启应用,查看启动日志中的RequestMappingHandlerMapping相关输出,确认是否存在以下类似日志:
Mapped "{[/contacts/retrieveAll],methods=[GET]}" onto public org.springframework.http.ResponseEntity<?> it.unicredit.demo.controller.AddressBookController.retrieveContacts()
如果有这条日志,说明端点已成功注册,再次访问即可正常响应。
内容的提问来源于stack exchange,提问作者nic
相关产品推荐
相关产品推荐

