从API网关响应返回正确的JSON验证错误

0

【以下的问题经过翻译处理】 我正在开发一个REST API。我已经为其中一个资源创建了一个模型,并将其用于验证POST请求。我希望以正确形式组成的JSON字符串返回任何验证错误。

我已经定义了一个Bad Request Body的网关响应,如下所示:

{
    "message": $context.error.messageString, 
    "errors":"$context.error.validationErrorString"
}

这个方法很有效,但我遇到的问题是$context.error.validationErrorString返回的不是一个有效的JSON字符串。如果我提交的请求没有信息,响应返回的是:

{
  message: 'Invalid request body',
  errors: '[object has missing required properties (["contactEmail","contactMessage","contactName","contactReason","contactSubject"])]'
}

在errors属性中返回的字符串不是有效的JSON。如果在调用客户端中将错误字符串解析为JSON,则会解析失败。

所以,我的问题是,是否有一种方法可以使用Gateway响应将验证错误字符串作为正确形式的JSON字符串获取?如果没有,推荐处理的方法是什么?既然它的目的是要在JSON响应中返回,为什么这个字符串不是正确组成的JSON字符串呢?

顺便说一下,如果有影响的话,这个API端点代理到一个Lambda函数,但是我希望在调用Lambda函数之前由API Gateway进行验证。

profile picture
专家
已提问 5 个月前14 查看次数
1 回答
0

【以下的回答经过翻译处理】 $context.error.validationErrorString参数是一个包含详细验证错误消息的字符串[1]。这可能是正确的JSON,也可能不是,具体取决于验证错误。

不幸的是,API Gateway目前不支持验证错误消息的定制。目前也没有办法以编程方式访问从"$context.error.validationErrorString"参数在API Gateway内获取的信息。

解决方法是,在负责处理验证错误消息的应用程序或工作流程(客户端)中,逻辑将不得不根据需要格式化字符串,即从$context.error.validationErrorString参数响应中去除括号和方括号。

关于$context.error.validationErrorString参数响应格式不始终是正确的JSON字符串的特性请求已经开放。没有时间表可以确定何时可以实施此特性。

注意!

资源:

[1]https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则