【问题标题】:API Gateway integration response mapping: parse statusCode and body from Step Function outputAPI Gateway 集成响应映射:从 Step Function 输出中解析 statusCode 和 body
【发布时间】: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


    【解决方案1】:

    我遇到了这个确切的问题。确实似乎没有办法直接转换为 JSON,所以我设计了一种使用 Apache VTL 将 JSON 写入 API Gateway 响应的方法:

    #set ($outputObj = $util.parseJson($input.path('$.output')))
    #foreach ( $key in $outputObj.body.keySet() )
      "$key": $outputObj.body[$key] #if ($foreach.hasNext),#end
    #end
    

    希望这可以帮助!

    (这适用于您描述的简单用例,但不适用于嵌套对象等)

    【讨论】:

      猜你喜欢
      • 2018-05-02
      • 1970-01-01
      • 2021-10-29
      • 2018-04-15
      • 2021-02-28
      • 2020-04-18
      • 2020-05-12
      • 2018-06-09
      • 1970-01-01
      相关资源
      最近更新 更多