Изменение поведения сборщика данных по умолчанию для 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();
Другие вопросы по тегам