从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
EXPERTE
gefragt vor 5 Monaten17 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen