You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在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

火山引擎 最新活动