我有一个链接到lambda函数的GET api网关调用(当传递有效的测试事件时,它在AWS UI中正确测试)。我已经生成了一个javascript api(通过AWS UI),并通过它在ember js中进行调用。我已经用我的对象填充了所有三个参数(params、body、additionalParams),该对象定义了我想要通过api调用传递的参数。一切似乎都在起作用。。。除了API和lambda之间的数据传递。
遗憾的是,我无法让任何数据从api请求流到我的lambda函数中。我已经尝试了以下不同的映射模板(并且我一直使用"部署API"):
#set($inputRoot = $input.path('$'))
{
"adultCount" : $inputRoot.adultCount,
"juniorCount" : $inputRoot.juniorCount,
"totalCost" : $inputRoot.totalCost,
"registeringUser" : "$inputRoot.registeringUser",
"registrations" : [
#foreach($elem in $inputRoot.registrations)
"$elem"
#if($foreach.hasNext),#end
#end
]
}
以及
{
"querystring" : "#foreach($key in $input.params().querystring.keySet())#if($foreach.index > 0)&#end$util.urlEncode($key)=$util.urlEncode($input.params().querystring.get($key))#end",
"body" : $input.json('$')
}
和
#set($keys = [])
#foreach($key in $input.params().querystring.keySet())
#set($success = $keys.add($key))
#end
#foreach($key in $input.params().headers.keySet())
#if(!$keys.contains($key))
#set($success = $keys.add($key))
#end
#end
#foreach($key in $input.params().path.keySet())
#if(!$keys.contains($key))
#set($success = $keys.add($key))
#end
#end
{
#foreach($key in $keys)
"$key": "$util.escapeJavaScript($input.params($key))"#if($foreach.hasNext),#end
#end
}
为什么我的数据不通过API流入我的函数?建议?
看起来您至少已经接近了第一个映射模板。我对它进行了一点修改,并使其发挥作用:
{
"adultCount" : $input.params('adultCount'),
"juniorCount" : $input.params('juniorCount'),
"totalCost" : $input.params('totalCost'),
"registeringUser" : "$input.params('registeringUser')",
"registrations" : [
#foreach($elem in $input.params('registrations').split(','))
"$elem"
#if($foreach.hasNext),#end
#end
]
}
在模板的某些部分,它看起来像是在试图解析请求的正文,而GET可能有一个正文,通常服务器应该忽略它。因此,如果你在GET上发送数据,它应该在querystring、headers和/或cookie中。当查询字符串的格式如下:?adultCount=3&juniorCount=4&totalCost=5®isteringUser=bob®istrations=99,88,66,55
时,上面的模板就可以工作了。