#java #graphql #graphql-java
Вопрос:
Я новичок в GraphQL, и после некоторого кодирования я столкнулся с проблемой с объявлением типа ввода для мутации. Вот моя схема:
type Test {
id: ID!
label: String!
}
extend type Query {
test(id : ID!): Test
listTests (where: myWhereCondition, orderBy: myOrderByCondition): [Test!]!
}
extend type Mutation {
createTest(label: String!, testTypes: TestTypesInput): Test!
}
input TestTypesInput {
testTypes: [IdInput]
}
input IdInput {
id: ID!
}
Когда я запускаю свое приложение, я получаю сообщение об ошибке
Вызвано: graphql.kickstart.tools.Ошибка схемы: Ожидалось, что тип «IdInput» будет типом GraphQLInputType, но это не так! Был ли тип разрешен только для типов объектов, неправильно используемых в качестве входного типа, или наоборот? в graphql.kickstart.tools.SchemaParser.determineType(SchemaParser.kt:400) ~[graphql-java-инструменты-11.0.1.jar:na] в graphql.kickstart.tools.SchemaParser.determineInputType(SchemaParser.kt:417) ~[graphql-java-инструменты-11.0.1.jar:na] в graphql.kickstart.tools.SchemaParser.determineInputType(SchemaParser.kt:410) ~[graphql-java-инструменты-11.0.1.jar:na] в graphql.кикстарт.инструменты.SchemaParser.createInputObject(SchemaParser.kt:179) ~[graphql-java-инструменты-11.0.1.jar:na] в graphql.kickstart.tools.SchemaParser.parseSchemaObjects(SchemaParser.kt:79) ~[graphql-java-инструменты-11.0.1.jar:na] в graphql.kickstart.tools.SchemaParser.makeExecutableSchema(SchemaParser.kt:112) ~[graphql-java-инструменты-11.0.1.jar:na] в graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration.graphQLSchema(GraphQLJavaToolsAutoConfiguration.java:143) ~[graphql-запуск-весна-загрузка-автоконфигурация-инструменты-11.1.0.jar:na]
Я не могу понять, чего мне не хватает, для меня «IdInput» хорошо объявлен, input
и, читая некоторые другие примеры, он кажется мне правильным, но это явно не так. Я попытался объявить че IdInput type
вместо input
, но это, очевидно, не работает. Как я могу передать список входных объектов во входной массив? Если вам нужна дополнительная информация, я добавлю ее, в данный момент я просто смешиваю некоторые декларации, чтобы придумать правильную, но безуспешно. Заранее благодарю вас за вашу помощь!
Комментарии:
1. Схема выглядит для меня нормально, ошибка должна исходить откуда-то еще. Может быть
IdIntput
, объявлен какtype
где-то еще в вашей схеме? Вы уверены, что сбой произошел из-за кода, которым вы поделились? Вы пробовали простую мутацию, напримерtest(id: IdInput) ID
, посмотреть, пройдет ли это?2. Вы правы, это пришло откуда-то еще: в распознавателе мутаций я объявил неправильным ввод TestTypesInput в сигнатуре метода. На самом деле, я не менял его, потому что увидел эту ошибку и сосредоточился на схеме GraphQL, думая, что проблема существует, и как только она будет исправлена, я смогу соответствующим образом установить сигнатуру метода. Действительно разочаровывающе узнать это. Спасибо за уделенное время!
3. Не беспокойтесь, рад, что вы узнали 🙂
Ответ №1:
Выясните, что это была ошибка, вводящая в заблуждение, поскольку схема GraphQL не могла получить данные с помощью метода подписи распознавателя мутаций. Вместо того, чтобы указывать на эту часть, она продолжала нарушать объявление схемы GraphQL. Как только был объявлен метод подписи в соответствии со Схемой, все сработало как по волшебству. Надеюсь, это может помочь кому-то с этой вводящей в заблуждение обработкой ошибок.