GraphQL SPQR - 如何获取客户端使用查询请求的字段列表

GraphQL SPQR - How to get the list of the fields were requested by client using a query

有没有办法检索客户端在 GraphQL 查询中请求的字段列表?

假设我有以下类型:

type Book {

  isbn: String
  title: String
  genre: String
  author: Author
}

type Author {

  name: String
  surname: String
  age: Int
}

在用@GraphQLQuery 注释的方法中 Java 端有没有办法知道客户端请求的字段?

例如,有以下查询:

query {

  book ( isbn = "12345" ) {
  
    title
    genre
  }
}

query {

  book ( isbn = "12345" ) {
  
    title
    author {
    
      name
      surname
    }
  }
}

我可以知道第一个查询请求的字段标题和书的类型 以及 Book 中的第二个必需标题以及作者的名字和姓氏?

谢谢 马西莫

您可以通过@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();
     ...
}