繁体   English   中英

AWS API 网关响应映射模板不起作用

[英]AWS API Gateway Response Mapping Template not working

我确定我在这里错过了一些非常简单的东西,但让我发疯了! 提前致谢!

我正在使用单个 GET 方法设置一个非常简单的测试 Api 网关,该方法触发一个返回以下 JSON 的 Lambda:

    {
     "coaches": [
       {
         "name": "Coach1",
         "id": "5"
       },
       {
          "name": "Coach2",
          "id": "7"
       }
    ]
   }

当我测试该方法时(在 AWS 控制台中),我可以看到以下日志行:

UTC 2020 年 2 月 5 日星期三 15:22:48:转换前的端点响应主体:"{\\"coaches\\":[{\\"name\\":\\"Coach1\\",\\"id\\":\\"5\\" },{\\"姓名\\":\\"Coach2\\",\\"id\\":\\"7\\"}]}"

这似乎很好。

现在我只想重新格式化输出以使其看起来更漂亮,因此我尝试将集成响应映射模板配置为:

[1]:https://i.stack.imgur.com/5I4Lg.png

代码如下:

#set($inputRoot = $input.path('$'))
{
  "coaches": [
#foreach($elem in $inputRoot.coaches)
    {
      "id": "$elem.id",
      "coach": "$elem.name",
    }#if($foreach.hasNext),#end

#end
  ]
}

但是,输出中的下一个日志行是:

UTC 2020 年 2 月 5 日星期三 15:22:48:转换后的方法响应主体:{“coaches”:[]}

所以转型似乎没有奏效。 不知道我做错了什么?

问题似乎出在您尝试迭代的集合上,因此数组为空。 没有$inputRoot.coaches集合,与$input对象下定义的params集合相反。
提取整个查询字符串参数的示例:

{
  "queryStringParameters": {
  #foreach($key in 
   $input.params().querystring.keySet())#if($foreach.index >0),#end
  "$key":"$input.params().querystring.get($key)"#end
   }
}

不过,您可以尝试使用$input.json(x)方法从 JSON 输入中提取您的$coaches集合; 此函数计算一个 JSON 表达式,例如: $input.json('$.coaches')返回一个 JSON 字符串,表示 Coaches 结构。

更多详情请参考API网关映射模板文档

我还邀请您阅读我关于 API Gateway 请求参数的博文: Controlling and Manipulating AWS API Gateway Request Parameters

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM