4

有没有办法检索客户端在 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
    }
  }
}

我可以知道第一个查询要求书的标题和流派字段,第二个要求书的标题以及作者的姓名和姓氏?

谢谢马西莫

4

1 回答 1

5

您可以通过 获取此信息@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();
     ...
}
于 2020-05-08T10:17:34.670 回答