我正在使用AppSync和DynamoDB。是否有一种方法可以抑制非空错误并返回其结果忽略非空字段的graphql查询的部分数据?例如,如果我运行以下查询:
query GetPerson {
getPerson(id: "123") {
name
active
}
}
并且在AppSync解析器中,我具有决定是否返回active
值的逻辑。如果我决定不返回active
,则会收到以下响应:
{
"data": {
"getPerson": null
},
"errors": [
{
"path": [
"getPerson",
"active"
],
"locations": null,
"message": "Cannot return null for non-nullable type: 'Boolean' within parent 'Person' (/getPerson/active)"
}
]
}
因为在我的架构中active
字段为非空。是否有任何方法可以抑制此错误并返回部分数据(即name
的值)?我想得到这样的回应:
{
"data": {
"getPerson": {
"name": "Jane Doe"
}
},
"errors": [
{
"path": [
"getPerson",
"active"
],
"locations": null,
"message": "Cannot return null for non-nullable type: 'Boolean' within parent 'Person' (/getPerson/active)"
}
]
}
没有非null字段永远不能返回null。
如果请求该字段并将其解析为null,则GraphQL将返回错误。因为该字段不能为null,所以GraphQL将为父字段返回null。如果该字段也不为空,则它将为that字段的父级返回null,依此类推,直到命中可为空的父级字段或根(即data
)。 spec中描述了此行为:
如果解析字段时抛出错误,则应将其视为字段返回null,并且必须在响应的“错误”列表中添加错误。
如果解析字段的结果为null(由于解析字段的函数返回null或发生错误),并且该字段属于Non-Null类型,则抛出字段错误。该错误必须添加到响应中的“错误”列表中...
由于非null类型的字段不能为null,所以传播字段错误以由父字段处理。如果父字段可能为null,则解析为null;否则,如果它是Non-Null类型,则该字段错误会进一步传播到其父字段...
如果从请求的根源到字段错误的源的所有字段都返回Non-Null类型,则响应中的“数据”条目应为null。
如果active
为空,则为[[可能,则不应在架构中将其设为不可为空。