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的原生支持,稳定性和适配性更好。
- 替换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>
- 配置GraphiQL
在application.properties中启用GraphiQL:
# 启用GraphiQL界面,访问路径为/graphiql spring.graphql.graphiql.enabled=true
调整文件位置
将query.graphqls文件移动到src/main/resources/graphql目录下(Spring GraphQL会自动扫描该路径下的schema文件)。修改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提供的适配版本:
- 替换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>
- 验证配置
确保query.graphqls放置在src/main/resources目录下,Query类保持原代码不变,启动项目后即可正常访问localhost:8080/graphql和localhost:8080/graphiql。
内容的提问来源于stack exchange,提问作者Sankar
相关产品推荐
相关产品推荐

