更改graphql-java的默认数据获取程序行为

时间:2018-09-11 21:51:52

标签: graphql-java

我正在使用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实例。然后,我想对idnamedescription字段的引用由我创建的另一个自定义数据提取程序实现来解决。

我尝试将默认的数据提取程序添加到我的接线中:

RuntimeWiring wiring = newRuntimeWiring()
    .type("query", builder -> builder
        .defaultDataFetcher(new PersistenceStoreNodeFetcher())
        .dataFetcher("myQuery", new MyQueryFetcher()))
    .build();

但这似乎不起作用-从未调用PersistenceSAtoreNodeFetcher类的get方法。

我一直在研究graphql-java文档和源代码,但尚未发现任何东西。

您知道如何用自己设计的提取程序替换或自定义PropertyDataFetcher行为吗?

1 个答案:

答案 0 :(得分:1)

我怀疑将defaultDataFetcher应用于查询对象,而不是myQuery返回的对象类型。您可能需要做的就是将defaultDataFetcher应用于myQuery对象类型。

RuntimeWiring wiring = newRuntimeWiring()
    .type("query", builder -> builder
      .dataFetcher("myQuery", new MyQueryFetcher()))
    .type("myQueryResult")
      .defaultDataFetcher(new PersistenceStoreNodeFetcher())
    .build();