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

如何在DGS Java GraphQL Client中使用变量执行GraphQL查询

解决DGS Java GraphQL Client构建带变量的查询问题

要让查询使用变量而非直接嵌入静态值,你需要在构建查询时使用变量占位符,而非传入具体参数值,再单独传递变量映射。具体修改如下:

1. 构建带变量占位符的查询请求

修改ExampleDataGraphQLQuery的构建逻辑,使用var()方法定义变量名,替代直接传入具体值:

// 构建查询时使用变量占位符,而非静态值
ExampleDataGraphQLQuery query = ExampleDataGraphQLQuery.newRequest()
        .queryName("ExampleQuery")
        // 用var("变量名")定义占位符
        .first(var("first"))
        .filter(var("filter"))
        .build();

// 定义返回字段投影
ExampleProjectionRoot<> projection = new ExampleProjectionRoot<>().id();

GraphQLQueryRequest request = new GraphQLQueryRequest(query, projection);

2. 单独构建变量映射

手动创建包含变量值的Map集合:

// 构建变量键值对
Map<String, Object> variables = new HashMap<>();
variables.put("first", 25);
variables.put("filter", ExampleFilterInput.newBuilder().field("test").build());

3. 执行查询并传入变量

调用executeQuery时,传入序列化后的查询字符串和变量映射:

Example response = graphQLClient
        .executeQuery(request.serialize(), variables)
        .extractValueAsObject(DgsConstants.QUERY.ExampleData, Example.class);

最终生成的请求格式

修改后的代码会生成你期望的请求结构:

{
    "query": "query ExampleQuery($first: Int, $filter: ExampleFilter) { exampleData(first: $first, filter: $filter) { id } }",
    "variables": {
        "filter": {
            "field": "test"
        },
        "first": 25
    }
}

关键说明

  • var("变量名")方法用于在查询中声明变量占位符,DGS客户端会自动生成查询开头的变量定义($first: Int, $filter: ExampleFilter)。
  • 变量值需要单独传递,而非在构建查询时直接传入,这样才能让查询体中使用变量引用而非静态值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:01:11