假设在API网关中定义了这样的路由:
POST /projects/{projectid}/key
映射到AWS Lambda,
如何在Lambda处理程序中获取{projectid}
值(即作为自定义Java类的输入对象的字段)?
据我了解,这样的事情应该做的工作: 在API网关定义中,集成请求>映射模板我已经为内容类型" application / json"添加了以下内容:
{ "projectid": "$input.params('projectid')" }
但是,即使冒号后面的部分($input.params('projectid)
似乎正确拾取(在CloudWatch的API网关日志中,值看起来如预期),映射也不起作用:{{1} }值到达后端。
请注意类似于
等路线的方法 null
按预期工作,具有类似的映射。
如果路径参数是路径中的最后一个,它看起来只会被映射吗?
答案 0 :(得分:2)
我发现了问题。 这不是映射模板本身, 但我调用AWS SDK功能的方式。 具体做法是:
apigClient.projectsProjectidKeyPost(params, {}, {})
不起作用 - projectid在Lambda代码中使用null
。
然而,这是有效的(请注意第二个参数值的变化):
apigClient.projectsProjectidKeyPost(params, '{}', {})
不确定这种行为的根本原因究竟是什么。
答案 1 :(得分:1)
检查Java Lambda处理程序以确保正确处理反序列化。您可以从一个简单的NodeJS函数开始进行测试,该函数不需要RequestHandler实现(它将在没有任何处理程序配置的情况下反序列化JSON有效负载中的所有内容)。
不确定您是否在这里谈论相同的API,但不应允许您在同一段上有两个路径参数,即/ projects / {id}和/ projects / {projectid不应该在同一个API中共存。
您可以先使用$ input.params()来获取所有参数并确认' projectid'正在那张地图中出现。同样,这在NodeJS函数中更容易调试。