从graphql获取解析器级别的请求字段
基于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
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对象,该对象包含要提取的字段、向字段提供的参数以及字段的父对象等其他信息,查询根对象或查询上下文对象。“哇,没想到会这么简单,会检查它是否测试过,工作是否完美,不知道为什么我正在寻找的任何解析器示例中都没有提到这一点!