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



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

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

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

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

2020 年 2 月 5 日星期三 15:22:48 UTC:转换前的终结点响应正文:">

{\"coaches\":[{\"name\":\"Coach1",\"id\":\"5\"},{\"name\":\"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
]
}

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

2020 年 2 月 5 日星期三 15:22:48 UTC:方法响应正文之后 转换: { "教练": [ ] }

因此,转型似乎没有奏效。不知道我做错了什么?

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

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

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

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

我还邀请您阅读我关于 API 网关请求参数的博客文章: 控制和操作 AWS API 网关请求参数

最新更新