我正在使用graphql-java进行概念验证项目,以实现GraphQL接口的后端。在我的项目中,我从中检索数据的持久层是一个专有API,该API具有类似于地图的操作,并且我想针对该专有API编写自定义数据提取逻辑。
我的根级查询的运行时接线如下所示:
RuntimeWiring wiring = newRuntimeWiring()
.type("query", builder -> builder
.dataFetcher("myQuery", new MyQueryFetcher()))
.build();
get()
方法当前返回一个名为PersistenceStore.Node
的类的实例,并且该对象具有类似地图的访问方法,我可以在后续的数据提取器中调用该方法。但是我一直无法正确连接数据提取器来处理这些后续提取。
在上面的示例中,我想进行如下查询:
query {
myQuery {
id,
name,
description
}
}
我希望以上运行时连接中显示的MyQueryFetcher
类返回一个PersistenceStore.Node
实例。然后,我想对id
,name
和description
字段的引用由我创建的另一个自定义数据提取程序实现来解决。
我尝试将默认的数据提取程序添加到我的接线中:
RuntimeWiring wiring = newRuntimeWiring()
.type("query", builder -> builder
.defaultDataFetcher(new PersistenceStoreNodeFetcher())
.dataFetcher("myQuery", new MyQueryFetcher()))
.build();
但这似乎不起作用-从未调用PersistenceSAtoreNodeFetcher
类的get
方法。
我一直在研究graphql-java文档和源代码,但尚未发现任何东西。
您知道如何用自己设计的提取程序替换或自定义PropertyDataFetcher
行为吗?
答案 0 :(得分:1)
我怀疑将defaultDataFetcher应用于查询对象,而不是myQuery返回的对象类型。您可能需要做的就是将defaultDataFetcher应用于myQuery对象类型。
RuntimeWiring wiring = newRuntimeWiring()
.type("query", builder -> builder
.dataFetcher("myQuery", new MyQueryFetcher()))
.type("myQueryResult")
.defaultDataFetcher(new PersistenceStoreNodeFetcher())
.build();