[英]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.