ValidationError FieldUndefined SPQR GraphQL
Я получаю следующее и не могу найти ответ.
Error [ValidationError{validationErrorType=FieldUndefined, queryPath=[find_by_id], message=Validation error of type FieldUndefined: Field 'find_by_id' in type 'Query' is undefined @ 'find_by_id', locations=[SourceLocation{line=1, column=2}], description='Field 'find_by_id' in type 'Query' is undefined'}]
Мой код
запрос
@GraphQLQuery(name = "find_by_id")
public Event findById(@GraphQLArgument(name = "id") Long id) {
Schema Gen
@EJB
private EventFacade eventFacade; // Normal stateless bean
GraphQLSchema guestSchema = new GraphQLSchemaGenerator()
.withOperationsFromSingleton(eventFacade)
.withValueMapperFactory(new JacksonValueMapperFactory())
.withDefaults()
.generate();
GraphQL graphQL = GraphQL.newGraphQL(guestSchema).build();
Код для выполнения
String query = "{find_by_id (id: 1){eventName}}";
ExecutionResult result = graphQL.execute(query);
Использование библиотеки SPQR
Событие POJO является базовым с eventName как String и идентификатором из абстрактного (Parent) класса. Класс сущности находится в другой банке (Entity Jar). Код для выполнения Query и схема сборки находятся в EJB Jar.
Любая помощь / указание, где я пошел не так, будет оценен.
ОБНОВЛЕНИЕ Создана проблема git, чтобы помочь решить проблему Git
3 ответа
Я нашел это решение здесь: https://github.com/leangen/graphql-spqr/wiki/Errors
Ссылка: Чтобы обработать все отсутствующие аргументы типа как Object или применить пользовательскую логику преобразования типа, укажите TypeTransformer:
Это должно работать для вас.
GraphQLSchema schema = new GraphQLSchemaGenerator()
.withBasePackages(basePackages)
.withTypeTransformer(new DefaultTypeTransformer(true, true))
.withOperationsFromSingleton(eventFacade).generate();
Я считаю, что вы должны изменить этот запрос String = "{find_by_id (id: 1){eventName}}"; to String query = "\"query\": {find_by_id (id: 1){eventName}}";
Можете ли вы добавить сведения о четном классе, я полагаю, в этом и заключается ваша проблема, поскольку автор в вашем URL передает класс запросу, но вы передаете только идентификатор (find_by_id), за которым следует {eventName}, я думаю, его следует изменить в
"{Event(id: 1){eventName}}"
Автор привел пример того, как использовать findBy ID в приведенных ниже примерах для класса Vendor, и он называет его в другом формате, отличном от вашего, возможно, попробуйте:) https://github.com/leangen/graphql-spqr-samples