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

GraphQL入门项目/graphql与/graphiql端点返回404问题求助

GraphQL项目访问404问题排查与解决

问题描述

本地搭建的GraphQL入门级项目可正常构建和运行,但访问localhost:8080/graphiql或通过AltAir插件访问localhost:8080/graphql时,均返回404白标错误页面。

项目详情

  • Java运行时版本:17
  • Spring Boot版本:3.2.1
  • Maven依赖:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>com.graphql-java</groupId>
        <artifactId>graphql-spring-boot-starter</artifactId>
        <version>5.0.2</version>
    </dependency>
    <dependency>
        <groupId>com.graphql-java</groupId>
        <artifactId>graphql-java-tools</artifactId>
        <version>5.2.4</version>
    </dependency>
    <dependency>
        <groupId>com.graphql-java</groupId>
        <artifactId>graphiql-spring-boot-starter</artifactId>
        <version>5.0.2</version>
    </dependency>
</dependencies>
  • Query类代码:
@Component  
public class Query implements GraphQLQueryResolver {
    public String firstName() {
        return "Sankar";
    }  
}
  • GraphQL schema文件(query.graphqls):
type Query{
    firstName : String
}

问题原因

你使用的com.graphql-java旗下的starter版本(5.0.2)是为Spring Boot 2.x设计的,与Spring Boot 3.2.1存在兼容性问题,无法在Spring Boot 3.x环境中正常注册GraphQL相关端点,导致访问时出现404错误。

解决方案

方案一:改用Spring官方的Spring GraphQL(推荐)

Spring Boot 3.x官方提供了对GraphQL的原生支持,稳定性和适配性更好。

  1. 替换Maven依赖
    移除原有的com.graphql-java相关依赖,添加Spring官方的GraphQL starter:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <!-- Spring官方GraphQL starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-graphql</artifactId>
    </dependency>
</dependencies>
  1. 配置GraphiQL
    在application.properties中启用GraphiQL:
# 启用GraphiQL界面,访问路径为/graphiql
spring.graphql.graphiql.enabled=true
  1. 调整文件位置
    将query.graphqls文件移动到src/main/resources/graphql目录下(Spring GraphQL会自动扫描该路径下的schema文件)。

  2. 修改Query类
    Spring GraphQL使用@QueryMapping注解定义查询方法,无需实现GraphQLQueryResolver:

@Component
public class Query {
    @QueryMapping
    public String firstName() {
        return "Sankar";
    }
}

方案二:使用适配Spring Boot 3.x的第三方GraphQL starter

如果坚持使用原有的GraphQL Java生态,可以改用com.graphql-java-kickstart提供的适配版本:

  1. 替换Maven依赖
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <!-- 适配Spring Boot 3.x的GraphQL starter -->
    <dependency>
        <groupId>com.graphql-java-kickstart</groupId>
        <artifactId>graphql-spring-boot-starter</artifactId>
        <version>12.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.graphql-java-kickstart</groupId>
        <artifactId>graphiql-spring-boot-starter</artifactId>
        <version>12.0.0</version>
    </dependency>
</dependencies>
  1. 验证配置
    确保query.graphqls放置在src/main/resources目录下,Query类保持原代码不变,启动项目后即可正常访问localhost:8080/graphql和localhost:8080/graphiql。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:46:23