当使用AWS API网关和AWS Lambda时,如何使用映射模板映射不在路径端的路径参数?
假设API网关中定义了这样的路由:当使用AWS API网关和AWS Lambda时,如何使用映射模板映射不在路径端的路径参数?,lambda,aws-lambda,aws-api-gateway,Lambda,Aws Lambda,Aws Api Gateway,假设API网关中定义了这样的路由: POST/projects/{projectid}/key 它被映射到AWS Lambda 如何在Lambda处理程序中获得{projectid}值(即作为自定义Java类的输入对象的字段) 据我所知,像这样的东西应该可以完成这项工作: 在API网关定义Integration Request>Mapping template中,我为内容类型“application/json”添加了以下内容: 但是,即使冒号($input.params('projectd)后面
POST/projects/{projectid}/key
它被映射到AWS Lambda
如何在Lambda处理程序中获得{projectid}
值(即作为自定义Java类的输入对象的字段)
据我所知,像这样的东西应该可以完成这项工作:
在API网关定义Integration Request>Mapping template中,我为内容类型“application/json”添加了以下内容:
但是,即使冒号($input.params('projectd)
后面的部分似乎被正确拾取(在CloudWatch的API网关日志中,该值看起来与预期的一样),映射也不起作用:null
值到达后端
请注意,类似的方法适用于以下路线:
GET/projects/{id}
使用类似的映射可以正常工作
看起来路径参数只有在它是路径中的最后一个时才会被映射
apigClient.projectsProjectidKeyPost(params, {}, {})
不起作用-Lambda代码中的Projectd arivesnull
但是,这是可行的(请注意第二个参数值的变化):
但不确定这种行为的根本原因是什么。可能只是您的输入错误,但映射模板规则应该是
{“projectid”:“$input.params('project-id')”}
。这应该会拉取与项目id相关的值,而不管它在路径中的什么位置。对不起,这确实是一个输入错误,但只在问题中,而不是在代码/配置中-它到处都是投影的。嗯,我不确定问题出在哪里。我经常使用资源路径中的变量,然后使用templ将它们拉出来ates。它们在路径中的位置似乎并不重要。有时我甚至在一个路径中有多个变量。我始终能够通过$input.params()
机制访问它们。好的,谢谢!我会在发现问题后立即更新此线程(我希望很快收到亚马逊支持部门的答复).Hmm这是一个有趣的观察结果。我将向待办事项列表中添加一些内容来调查此行为。编辑:可能是您配置的映射模板在第一种情况下没有应用于请求。映射模板是根据内容类型标头选择的,因此在第一种情况下,客户端可能没有发送由于未发送任何内容,因此显示内容类型标题。
apigClient.projectsProjectidKeyPost(params, {}, {})
apigClient.projectsProjectidKeyPost(params, '{}', {})