如何在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
相关产品推荐
相关产品推荐

