Spring Boot GraphQL集成测试返回404 Not Found问题求助
解决Spring Boot GraphQL Test集成测试404问题
我来帮你排查这个404的问题,之前我也碰到过类似的情况,咱们一步步来解决:
首先明确核心问题:你使用@GraphQLTest注解编写集成测试时,Spring Boot GraphQL Test库没有正确初始化GraphQL端点,导致请求/api/graphql返回404未找到。
可能的解决方案
1. 确保依赖版本完全一致
版本不匹配是这类问题的高发原因,一定要保证graphql-spring-boot-starter和graphql-spring-boot-test的版本完全相同。比如Maven项目的pom.xml里要这么配置:
<dependency> <groupId>com.graphql-java-kickstart</groupId> <artifactId>graphql-spring-boot-starter</artifactId> <version>你的统一版本号</version> </dependency> <dependency> <groupId>com.graphql-java-kickstart</groupId> <artifactId>graphql-spring-boot-test</artifactId> <version>你的统一版本号</version> <scope>test</scope> </dependency>
2. 确认端点路径配置并在测试中指定
如果你在application.properties或application.yml里自定义了GraphQL端点路径(比如graphql.servlet.mapping=/api/graphql),需要确保测试上下文能读取到这个配置,或者手动在测试请求里指定路径:
GraphQLResponse response = graphQLTestTemplate.postForResource("/api/graphql", "graphql/register.graphql");
3. 切换到完整上下文测试
有时候@GraphQLTest的切片测试会漏掉一些必要的Bean,导致端点无法注册。这时候可以用@SpringBootTest配合@AutoConfigureGraphQLTester来替代切片测试,加载完整的Spring上下文:
@SpringBootTest @AutoConfigureGraphQLTester public class UserTest { @Autowired private GraphQLTestTemplate graphQLTestTemplate; @Test public void createUser() throws IOException { GraphQLResponse response = graphQLTestTemplate.postForResource("graphql/register.graphql"); assertNotNull(response); assertTrue(response.isOk()); assertEquals("1", response.get("$.data.post.id")); } }
4. 确保GraphQL配置类被扫描到
如果你的GraphQL Schema定义、Resolver等配置类不在默认的包扫描路径下,@GraphQLTest可能无法加载这些类,导致端点无法创建。可以在测试类上用@Import导入必要的配置类:
@GraphQLTest @Import(YourGraphQLConfig.class) public class UserTest { // 测试代码不变 }
这些方案基本覆盖了相关讨论里的核心解决思路,你可以逐个尝试,应该能解决404的问题。
内容的提问来源于stack exchange,提问作者Mustafa Qamaruddin
相关产品推荐
相关产品推荐

