Изменение поведения сборщика данных по умолчанию для graphql-java
Я делаю проект для проверки концепции с использованием graphql-java для реализации серверной части интерфейса GraphQL. В моем проекте постоянный уровень, из которого я извлекаю данные, является проприетарным 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
поведение со сборщиком моего собственного дизайна?
1 ответ
Я подозреваю, что defaultDataFetcher применяется к объекту запроса, а не к типу объекта, возвращаемого myQuery. Вероятно, вам нужно применить defaultDataFetcher к типу объекта myQuery.
RuntimeWiring wiring = newRuntimeWiring()
.type("query", builder -> builder
.dataFetcher("myQuery", new MyQueryFetcher()))
.type("myQueryResult")
.defaultDataFetcher(new PersistenceStoreNodeFetcher())
.build();