来自 graphql 模式的书籍模型
type Book {
id: ID
name: String
pageCount: Int
author: Author
}
所以我有这个书的解析器
public class BookResolver implements BookByIdQueryResolver, GraphQLQueryResolver {
private final MockRepository mockRepository;
public BookResolver(MockRepository mockRepository) {
this.mockRepository = mockRepository;
}
@Override
public BookTO bookById(String id) {
return mockRepository.getBookById(id);
}
}
它工作正常。
现在假设我正在使用这个 graphql 查询,它只请求 Book 的一个字段
{
bookById(id: "someId") {
name
}
}
问题是,如何获取有关所请求字段的 bookById 方法级别的信息(在这种情况下只有名称字段)?GraphQLQueryResolver 概念甚至可以实现这一点吗?
使用 dataFetcher 的示例
public DataFetcher getBookByIdDataFetcher() {
return dataFetchingEnvironment -> {
String bookId = dataFetchingEnvironment.getArgument("id");
List<SelectedField> requestedFields = dataFetchingEnvironment.getSelectionSet()
.getFields()
.stream()
.collect(Collectors.toList());
return books
.stream()
.filter(book -> book.get("id").equals(bookId))
.findFirst()
.orElse(null);
};
}
这很好用,但我对 Resolver 方式很感兴趣。可能吗?