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

添加GraphQL测试依赖后出现MergedAnnotations$SearchStrategy缺失错误求助

解决方案:Spring 4.1.0 兼容的 GraphQL 集成测试方案

问题根源

你遇到的java.lang.NoClassDefFoundError: org/springframework/core/annotation/MergedAnnotations$SearchStrategy,本质是graphql-spring-boot-starter-test 6.0.0依赖Spring 5.2+的核心API,而Spring 4.1.0并未提供这个类,因此必须使用适配Spring 4.x的旧版本库。

方案1:使用兼容Spring 4.x的graphql-spring-boot-starter-test版本

graphql-java-kickstart的3.x系列版本专门适配Spring 4.x,推荐使用3.10.0(3.x分支的最后稳定版之一),它不会依赖Spring 5+特性,不会与现有Spring 4.1.0冲突。

在Maven中替换依赖:

<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter-test</artifactId>
    <version>3.10.0</version>
    <scope>test</scope>
</dependency>

该版本包含GraphQL测试客户端、MockMvc集成等核心测试功能,足以满足基础集成测试需求,且不会引入高版本Spring依赖影响现有项目。

若担心传递依赖引入高版本Spring,可手动排除相关依赖:

<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter-test</artifactId>
    <version>3.10.0</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </exclusion>
        <!-- 按需排除其他Spring传递依赖 -->
    </exclusions>
</dependency>

方案2:使用Spring原生MockMvc手动测试GraphQL端点

若不想引入第三方测试库,可直接用Spring 4.1.0自带的MockMvc构造GraphQL请求,完成测试:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-test.xml")
public class GraphQLIntegrationTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testUserQuery() throws Exception {
        String graphqlRequest = "{ \"query\": \"query { user(id: 1) { name email } }\" }";
        
        mockMvc.perform(post("/graphql")
                .contentType("application/json")
                .content(graphqlRequest))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.data.user.name").value("John Doe"))
                .andExpect(jsonPath("$.data.user.email").value("john@example.com"));
    }
}

这种方式完全依赖Spring原生测试组件,无额外依赖冲突,适合对依赖管控严格的老项目。

注意事项

  • 避免使用4.x及以上版本的graphql-spring-boot-starter-test,这些版本最低要求Spring 5.0+,必然与Spring 4.1.0冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:45:30