【发布时间】:2022-08-30 09:28:37
【问题描述】:
我想使用 VTL 从 API Gateway 集成响应中解析“statusCode”和“body”值,并将它们作为方法响应返回,如下所示:
Request status: 201
Response body: {"firstName":"He","lastName":"Man","email":"he.man@eternia.com"}
我的 API Gateway Step Function 集成返回以下集成响应正文(这是在转换之前,从输出中删除不相关的属性):
{
"output": "{\"statusCode\":201,\"body\":{\"firstName\":\"He\",\"lastName\":\"Man\",\"email\":\"he.man@eternia.com\"}}"
}
我会假设这是可行的:
#set ($output = $util.parseJson($input.json('$.output')))
#set ($statusCode = $output.statusCode)
#set ($context.responseOverride.status = $statusCode)
$output.body
但状态未更新且正文为空
Request status: 200
Response body: <empty>
使用这种方法,我可以解析正文:
#set ($bodyObj = $util.parseJson($input.body))
#set ($output = $util.parseJson($bodyObj.output))
#set ($context.responseOverride.status = $output.statusCode)
$output.body
statusCode 已更新,但正文作为对象表示返回,即不是 JSON。
Request status: 201
Response body: {firstName=He, lastName=Man, email=he.man@eternia.com}
在上述情况下,如何将 $output.body 正确序列化为 JSON? API Gateway 似乎没有像 AppSync 那样的 $util.toJson 函数 (https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-programming-guide.html)
我已经确认解析输出变量可以正常工作:
#set ($output = $util.parseJson($input.json('$.output')))
$output
Request status: 200
Response body: {"statusCode":201,"body":{"firstName":"He","lastName":"Man","email":"he.man@eternia.com"}}
相关参考文档:
【问题讨论】:
标签: amazon-web-services aws-step-functions api-gateway vtl