我正在使用AppSync,看来验证错误不会触发响应映射模板中的错误捕获。 属性值包含一个AWSPhone输入。 如果我为AWSPhone输入了错误的格式,则错误(按预期)是:
{
"data": null,
"errors": [
{
"path": null,
"locations": [
{
"line": 2,
"column": 17,
"sourceName": null
}
],
"message": "Validation error of type WrongType: argument 'input.company.phoneNumber' with value 'StringValue{value='+1-541-754-300'}' is not a valid 'AWSPhone' @ 'createProfile'"
}
]
}
我的请求映射模板如下:
{
"version": "2018-05-29",
"operation": "PutItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($ctx.args.input.client),
},
"attributeValues": $util.dynamodb.toMapValuesJson($ctx.args.input),
}
我的响应映射模板:
#if($ctx.error)
$util.error("Custom error response")
#end
$util.toJson($ctx.result)
很明显,确实发生了错误,但不会在我的响应模板中触发该情况。 我该如何返回验证错误的自定义消息? 在这种情况下甚至有可能吗?
答案 0 :(得分:0)
根据您提供的内容,看来您的PutItem
操作确实成功并返回了您放在$ctx.result
字段中的项目。然后,当AppSync尝试将响应映射模板的输出上的字段之一强制转换为AWSPhone时,它将失败,并显示您提到的验证错误。
#if($ctx.error) $util.error("Custom error response")
仅捕获DynamoDB错误。从您的结果到字段输出类型的GraphQL强制发生在模板评估后 。
一种解决方法是将验证添加到您的请求映射模板中,然后再将其保存在DynamoDB中,或将DynamoDB返回的值更改为正确的AWSPhone标量格式。