GraphQL SPQR - 如何获取客户端使用查询请求的字段列表
Posted
技术标签:
【中文标题】GraphQL SPQR - 如何获取客户端使用查询请求的字段列表【英文标题】:GraphQL SPQR - How to get the list of the fields were requested by client using a query 【发布时间】:2020-08-23 08:17:57 【问题描述】:有没有办法检索客户端在 GraphQL 查询中请求的字段列表?
假设我有以下类型:
type Book
isbn: String
title: String
genre: String
author: Author
type Author
name: String
surname: String
age: Int
在 Java 端是否有办法在使用 @GraphQLQuery 注释的方法中知道客户端请求的字段?
例如,有以下查询:
query
book ( isbn = "12345" )
title
genre
query
book ( isbn = "12345" )
title
author
name
surname
我可以知道第一个查询请求书的标题和流派字段 以及书籍中第二个必需的标题以及作者的姓名和姓氏?
谢谢 马西莫
【问题讨论】:
【参考方案1】:您可以通过@GraphQLEnvironment
获取此信息。如果您只需要直接子字段,则可以注入如下名称:
@GraphQLQuery
public Book book(String isbn, @GraphQLEnvironment Set<String> subfields)
...
如果您想要所有子字段或其他选择信息,您可以注入ResolutionEnvironment
并从那里获取DataFetcherEnvironment
。这反过来又使您可以访问整个SelectionSet
。
@GraphQLQuery
public Book book(String isbn, @GraphQLEnvironment ResolutionEnvironment env)
DataFetchingFieldSelectionSet selection = env.dataFetchingEnvironment.getSelectionSet();
...
【讨论】:
感谢@kaqqao,它有效!我的意图是提取所需的字段以构建动态实体图,并将它们与基础数据库一起使用,仅根据客户的需求进行所需的连接。我已经有了一个实现:) 我很想看看它的实际效果,如果你有什么可以分享的:) 这里是 Github 存储库(仅用于探索 GraphQL 功能的训练 POC):github.com/m-daros/graphql-spring-boot。您可以在此类中找到基于您的提示的代码:github.com/m-daros/graphql-spring-boot/blob/master/src/main/…。 :)。您可以运行应用程序并使用 GUI localhost:8080/gui 尝试一些查询以上是关于GraphQL SPQR - 如何获取客户端使用查询请求的字段列表的主要内容,如果未能解决你的问题,请参考以下文章
我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq
无法摆脱 graphql-spqr-spring-boot-starter 中的“获取数据时异常(/apiName)”