Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从graphql获取解析器级别的请求字段_Graphql_Graphql Java_Graphql Java Tools - Fatal编程技术网

从graphql获取解析器级别的请求字段

从graphql获取解析器级别的请求字段,graphql,graphql-java,graphql-java-tools,Graphql,Graphql Java,Graphql Java Tools,基于graphql模式的图书模型 type Book { id: ID name: String pageCount: Int author: Author } 所以我有一本书的解析器 公共类BookResolver实现BookByIdQueryResolver、GraphQLQueryResolver{ 私有最终MockRepository MockRepository; 公共BookResolver(MockRepository MockRepository){ this

基于graphql模式的图书模型

type Book {
  id: ID
  name: String
  pageCount: Int
  author: Author
}

所以我有一本书的解析器

公共类BookResolver实现BookByIdQueryResolver、GraphQLQueryResolver{
私有最终MockRepository MockRepository;
公共BookResolver(MockRepository MockRepository){
this.mockRepository=mockRepository;
}
@凌驾
公共BookTO bookById(字符串id){
返回mockRepository.getBookById(id);
}
}
它很好用

现在让我们假设我正在使用这个graphql查询,它只请求书中的一个字段

{
  bookById(id: "someId") {
    name
  }
}
问题是,如何在bookById方法级别上获取有关所请求字段的信息(在本例中仅为name字段)?这在GraphQLQueryResolver概念中可能吗

dataFetcher示例

public DataFetcher getBookByIdDataFetcher(){
返回dataFetchingEnvironment->{
String bookId=dataFetchingEnvironment.getArgument(“id”);
List requestedFields=dataFetchingEnvironment.getSelectionSet()
.getFields()
.stream()
.collect(Collectors.toList());
还书
.stream()
.filter(book->book.get(“id”).equals(bookId))
.findFirst()
.orElse(空);
};
}

这很有效,但我对解析器方式感兴趣。有可能吗?

您可以添加dataFetchingEnvironment作为参数,并使用该参数获取请求的字段名列表

public BookTO bookById(String id, DataFetchingEnvironment dataFetchingEnvironment) {

    List<SelectedField> requestedFields = dataFetchingEnvironment.getSelectionSet()
                .getFields()
                .stream()
                .collect(Collectors.toList());
    // Use this for your use cases


    return mockRepository.getBookById(id);
}
public BookTO bookById(字符串id,DataFetchingEnvironment DataFetchingEnvironment){
List requestedFields=dataFetchingEnvironment.getSelectionSet()
.getFields()
.stream()
.collect(Collectors.toList());
//将其用于您的用例
返回mockRepository.getBookById(id);
}

需要明确的是,对于您创建并给出查询请求的解析器,响应将只有名称而没有其他字段。

您可以进一步解释您的要求吗?添加了一些详细信息,问题是在解析器中,我只获得了我查找该书的参数信息(本例中为id)。我想实现的目标是,我希望能够检查QueryId中请求了book中的哪些字段,您是否检查了这个?这是一个js解决方案,我正在寻找一个java解决方案,并使用提到的特定方法“每个DataFetcher都被传递一个graphql.schema.DataFetchingEnvironment对象,该对象包含要提取的字段、向字段提供的参数以及字段的父对象等其他信息,查询根对象或查询上下文对象。“哇,没想到会这么简单,会检查它是否测试过,工作是否完美,不知道为什么我正在寻找的任何解析器示例中都没有提到这一点!