dou*_*leW 9 graphql graphql-java graphql-java-tools
来自 graphql 模式的书籍模型
type Book {
id: ID
name: String
pageCount: Int
author: Author
}
Run Code Online (Sandbox Code Playgroud)
所以我有一个 Book 解析器
type Book {
id: ID
name: String
pageCount: Int
author: Author
}
Run Code Online (Sandbox Code Playgroud)
效果很好。
现在假设我正在使用这个 graphql 查询,它只请求 Book 的一个字段
{
bookById(id: "someId") {
name
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,如何获取有关请求字段的 bookById 方法级别的信息(在本例中仅是名称字段)?这对于 GraphQLQueryResolver 概念来说是可能的吗?
dataFetcher 的示例
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我对解析器方式感兴趣。是否可以?
小智 13
您可以添加 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);
}
Run Code Online (Sandbox Code Playgroud)
需要明确的是,对于您创建的解析器并给出查询请求,响应将只有名称而没有其他字段。
| 归档时间: |
|
| 查看次数: |
4534 次 |
| 最近记录: |