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

Spring Boot所有接口返回404问题排查求助

Spring Boot接口全404问题排查与修复

核心问题分析与修复步骤

1. 解决Spring Boot 3的JPA依赖兼容性问题

Spring Boot 3.x基于Jakarta EE 9+,不再支持javax.persistence包,必须使用jakarta.persistence。你的pom.xml中引入了javax.persistence-api:2.2,这会导致JPA注解失效,甚至干扰Spring组件扫描:

  • 直接删除javax.persistence-api依赖
  • spring-boot-starter-data-jpa已经包含了适配Jakarta EE的API,无需额外引入

2. 给实体类添加无参构造函数

Spring Data JPA要求实体类必须提供无参构造函数,否则无法通过反射实例化对象。在Odds类中补充无参构造:

public Odds() {
    // 供Spring反射实例化使用的无参构造
}

3. 修正包名拼写错误(若启用JPA仓库扫描)

注释掉的@EnableJpaRepositories注解中包名拼写错误:com.bookieburlgar.api.services(多了一个r),正确包名是com.bookieburglar.api.services。不过@SpringBootApplication已经默认扫描主类所在包下的Repository,所以可以不用手动添加该注解,除非Repository在其他包。

4. 移除冗余的@ComponentScan配置

@SpringBootApplication注解已经内置@ComponentScan,默认扫描主类(BookieBurglarApplication)所在包com.bookieburglar.api.services及其所有子包,手动添加的@ComponentScan(basePackages = "com.bookieburglar.api.services")属于冗余配置,删除后可避免潜在扫描冲突。

5. 确认访问路径正确性

OddsController的@RequestMapping("/Odds")搭配@GetMapping("/"),正确访问路径为:

http://localhost:8080/Odds/

注意路径中Odds首字母为大写,不要写成小写。


修复后的关键代码示例

修正后的主类

package com.bookieburglar.api.services;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BookieBurglarApplication {

    public static void main(String[] args) {
        SpringApplication.run(BookieBurglarApplication.class, args);
    }
}

修正后的Odds实体类(添加无参构造)

package com.bookieburglar.api.services.models;

import java.util.List;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToMany;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@Entity
@JsonIgnoreProperties(ignoreUnknown = true)
public class Odds {

    @Id
    @JsonProperty("id")
    private String id;

    @JsonProperty("sport_key")
    private String sport_key;

    @JsonProperty("sport_title")
    private String sport_title;

    @JsonProperty("commence_time")
    private String commence_time;

    @JsonProperty("home_team")
    private String home_team;

    @JsonProperty("away_team")
    private String away_team;

    @JsonProperty("bookmakers")
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "odds_id")
    private List<Bookmaker> bookmakers;

    // 新增无参构造函数
    public Odds() {}

    public Odds(String id, String sportKey, String sportTitle, String commenceTime,
            String homeTeam, String awayTeam, List<Bookmaker> bookmakers) {
        this.id = id;
        this.sport_key = sportKey;
        this.sport_title = sportTitle;
        this.commence_time = commenceTime;
        this.home_team = homeTeam;
        this.away_team = awayTeam;
        this.bookmakers = bookmakers;
    }

    // 原有getter、setter方法保持不变
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getSportKey() { return sport_key; }
    public void setSportKey(String sportKey) { this.sport_key = sportKey; }
    public String getSportTitle() { return sport_title; }
    public void setSportTitle(String sportTitle) { this.sport_title = sportTitle; }
    public String getCommenceTime() { return commence_time; }
    public void setCommenceTime(String commenceTime) { this.commence_time = commenceTime; }
    public String getHomeTeam() { return home_team; }
    public void setHomeTeam(String homeTeam) { this.home_team = homeTeam; }
    public String getAwayTeam() { return away_team; }
    public void setAwayTeam(String awayTeam) { this.away_team = awayTeam; }
    public List<Bookmaker> getBookmakers() { return bookmakers; }
    public void setBookmakers(List<Bookmaker> bookmakers) { this.bookmakers = bookmakers; }
}

修正后的pom.xml(移除javax.persistence依赖)

<?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.0.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bookieburglar.api</groupId>
    <artifactId>services</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Bookie Burglar</name>
    <description>API for BookieBurglar</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>

        <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.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

验证步骤

  1. 清理Maven缓存并重新构建:mvn clean install
  2. 启动Spring Boot应用
  3. 访问http://localhost:8080/Odds/,应返回WORLD
  4. 访问http://localhost:8080/Odds/refresh,应返回yoo

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:35:51