Mutation 的 GraphQL 输入类型声明
Posted
技术标签:
【中文标题】Mutation 的 GraphQL 输入类型声明【英文标题】:GraphQL Input type declaration for Mutation 【发布时间】:2021-11-25 19:51:23 【问题描述】:我是 GraphQL 的新手,经过一些编码后,我遇到了一个问题,即为 Mutation 声明输入类型。 这是我的架构:
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.SchemaError:预期类型 'IdInput' 是一个 GraphQLInputType,但它不是!只是一个类型 允许错误地用作输入类型的对象类型,或 反之亦然?在 graphql.kickstart.tools.SchemaParser.determineType(SchemaParser.kt:400) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.determineInputType(SchemaParser.kt:417) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.determineInputType(SchemaParser.kt:410) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.createInputObject(SchemaParser.kt:179) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.parseSchemaObjects(SchemaParser.kt:79) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.SchemaParser.makeExecutableSchema(SchemaParser.kt:112) ~[graphql-java-tools-11.0.1.jar:na] 在 graphql.kickstart.tools.boot.GraphQLJavaToolsAutoConfiguration.graphQLSchema(GraphQLJavaToolsAutoConfiguration.java:143) ~[graphql-kickstart-spring-boot-autoconfigure-tools-11.1.0.jar:na]
我不明白我错过了什么,对我来说,“IdInput”被很好地声明为input
并且阅读了一些其他示例,它看起来对我来说是正确的,但显然不是。我试图将 che IdInput 声明为 type
insted of input
,但它显然不起作用。如何将输入对象列表传递到输入数组中?
如果您需要更多信息,我会添加它们,目前我只是混合一些声明以提出正确的声明,但没有成功。
提前感谢您的帮助!
【问题讨论】:
架构对我来说看起来不错,错误一定来自其他地方。也许IdIntput
声明为type
在您的架构中的其他地方?您确定失败来自您共享的代码吗?您是否尝试过简单的突变,例如test(id: IdInput) ID
,看看能不能通过?
你是对的,它来自其他地方:在 Mutation 解析器中,我在方法的签名中声明了错误的 TestTypesInput。实际上,我并没有更改它,因为我看到了这个错误并专注于 GraphQL 架构,认为问题就在那里,一旦修复,我就可以相应地设置方法的签名。发现真的很失望。感谢您的宝贵时间!
别担心,很高兴你发现了 :)
【参考方案1】:
发现这是一个误导性错误,因为 GraphQL 架构无法使用 Mutation Resolver 的签名方法获取。它没有指出那部分,而是不断地打破 GraphQL Schema 声明。 一旦根据 Schema 声明了签名方法,一切都像魅力一样。 希望它可以帮助处理这种误导性错误的人。
【讨论】:
以上是关于Mutation 的 GraphQL 输入类型声明的主要内容,如果未能解决你的问题,请参考以下文章
紧跟在查询类型(query/mutation)GraphQL之后的字符串的意义
如何从 GraphQL Mutation 返回 Union 类型
具有“自定义类型”属性的DynamoDB表的Graphql Mutation查询
Angular Apollo:错误:GraphQL 错误:“Mutation”类型的字段“AuthLogin”上的未知参数“用户名”