AppSync验证错误不会触发响应映射模板中的错误处理程序

时间:2019-10-21 10:19:22

标签: amazon-web-services amazon-dynamodb aws-appsync

我正在使用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)

很明显,确实发生了错误,但不会在我的响应模板中触发该情况。 我该如何返回验证错误的自定义消息? 在这种情况下甚至有可能吗?

1 个答案:

答案 0 :(得分:0)

根据您提供的内容,看来您的PutItem操作确实成功并返回了您放在$ctx.result字段中的项目。然后,当AppSync尝试将响应映射模板的输出上的字段之一强制转换为AWSPhone时,它将失败,并显示您提到的验证错误。

#if($ctx.error) $util.error("Custom error response")仅捕获DynamoDB错误。从您的结果到字段输出类型的GraphQL强制发生在模板评估后

一种解决方法是将验证添加到您的请求映射模板中,然后再将其保存在DynamoDB中,或将DynamoDB返回的值更改为正确的AWSPhone标量格式。