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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:07:05