如何在API网关映射模板中整合路径参数与请求体值?
解决API Gateway映射路径参数与请求体到Lambda输入的问题
我来帮你搞定这个映射模板的配置,其实很简单,只需要在现有的模板基础上,加上从请求体提取value字段的逻辑就行,具体步骤和模板写法如下:
1. 编写正确的VTL映射模板
你需要在集成请求的映射模板里,把路径参数id和请求体中的value合并成Lambda需要的JSON结构。直接用下面的模板替换你现有的内容即可:
{ "id": "$method.request.path.id", "value": "$input.json('$.value')" }
模板逻辑说明:
$method.request.path.id:这就是你已经在使用的,从URL路径/items/{id}中提取的id值$input.json('$.value'):这个语法会解析HTTP请求体的JSON内容,提取其中的value字段值
如果你的请求体以后可能包含更多字段,想要自动合并路径参数和请求体所有内容,可以用更灵活的写法:
#set($requestBody = $input.json('$')) #set($pathParameters = {"id": "$method.request.path.id"}) #set($mergedRequest = $util.mergeObjects($requestBody, $pathParameters)) $util.toJson($mergedRequest)
这个模板会先把请求体转换成JSON对象,再把路径id合并进去,最后转成JSON字符串发送给Lambda。
2. 配置并验证的步骤
- 打开AWS API Gateway控制台,找到你的API,进入
/items/{id}的PUT方法 - 切换到集成请求标签,滚动到映射模板部分
- 确保你已经添加了
application/json的模板(如果没有,点击"添加映射模板",输入application/json并确认) - 将模板内容替换成上面的任意一种,保存设置
- 重新部署你的API(必须部署才会生效!)
- 测试PUT请求:向
/items/1发送请求体{"value": "foobar"},此时Lambda收到的输入就会是你想要的{"id": "1", "value": "foobar"}
内容的提问来源于stack exchange,提问作者Vihung




