AWS API 网关 GET-> Lambda 函数映射模板问题



我有一个链接到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&registeringUser=bob&registrations=99,88,66,55时,上面的模板就可以工作了。

相关内容

  • 没有找到相关文章

最新更新