在将AWS API Gateway与AWS Lambda一起使用时,如何使用映射模板映射不在路径端的路径参数?

时间:2016-02-02 12:20:24

标签: lambda aws-lambda aws-api-gateway

假设在API网关中定义了这样的路由:

POST /projects/{projectid}/key

映射到AWS Lambda,

如何在Lambda处理程序中获取{projectid}值(即作为自定义Java类的输入对象的字段)?

据我了解,这样的事情应该做的工作: 在API网关定义中,集成请求>映射模板我已经为内容类型" application / json"添加了以下内容:

{ "projectid": "$input.params('projectid')" }

但是,即使冒号后面的部分($input.params('projectid)似乎正确拾取(在CloudWatch的API网关日志中,值看起来如预期),映射也不起作用:{{1} }值到达后端。

请注意类似于

等路线的方法

null按预期工作,具有类似的映射。

如果路径参数是路径中的最后一个,它看起来只会被映射吗?

2 个答案:

答案 0 :(得分:2)

我发现了问题。 这不是映射模板本身, 但我调用AWS SDK功能的方式。 具体做法是:

apigClient.projectsProjectidKeyPost(params, {}, {})

不起作用 - projectid在Lambda代码中使用null

然而,这是有效的(请注意第二个参数值的变化):

apigClient.projectsProjectidKeyPost(params, '{}', {})

不确定这种行为的根本原因究竟是什么。

答案 1 :(得分:1)

  1. 检查Java Lambda处理程序以确保正确处理反序列化。您可以从一个简单的NodeJS函数开始进行测试,该函数不需要RequestHandler实现(它将在没有任何处理程序配置的情况下反序列化JSON有效负载中的所有内容)。

  2. 不确定您是否在这里谈论相同的API,但不应允许您在同一段上有两个路径参数,即/ projects / {id}和/ projects / {projectid不应该在同一个API中共存。

  3. 您可以先使用$ input.params()来获取所有参数并确认' projectid'正在那张地图中出现。同样,这在NodeJS函数中更容易调试。