向 VTL 中的对象添加键/值对(用于 API 网关)
Posted
技术标签:
【中文标题】向 VTL 中的对象添加键/值对(用于 API 网关)【英文标题】:Adding a key/value pair to an object in VTL (for API Gateway) 【发布时间】:2018-05-21 09:52:52 【问题描述】:我正在为 AWS API Gateway 集成响应编写映射模板。我想向返回我的 Lambda 函数的 JSON 对象添加一个键/值对。
我的函数返回一些像这样的 JSON:
"id": "1234",
"name": "Foo Barstein"
我希望模板输出如下内容:
"id": "1234",
"name": "Foo Barstein",
"href": "https://example.tld/thingy/1234"
我的映射模板如下所示:
#set($thingy = $input.json('$'))
#set($thingy.href = "https://example.tld/thingy/$thingy.id")
$thingy
但是,我的模板输出未修改的$thingy
,没有我尝试添加的href
。
我已阅读VTL user guide,但无济于事。
【问题讨论】:
太垃圾了,AWS 采用 VTL 来处理 json 对象或任何类型的映射。 【参考方案1】:这样的事情对我有用:
#set($body = $input.path('$'))
#set($body.href = "https://example.tld/thingy/$body.id")
$input.json('$')
【讨论】:
这就是答案 - 完全符合原始问题的要求 感谢为我工作【参考方案2】:没有简单的方法可以实现这一点,但您可以解决它:
## Mapping template
#set($body = $input.body)
#set($id = $input.json('$.id'))
"custom":
"href" : "https://example.tld/thingy/$id"
,
"body": $body
然后合并 AWS.Lambda 中的所有键(如果你使用 Lambda):
## Lambda handler
exports.handler = function(event, context)
const requestParams = Object.assign(, event.body, event.custom);
// ... function code
requestParams
将是你想要的。
【讨论】:
【参考方案3】:以下可以解决问题。当心,未经测试!
#set($payload = $util.parseJson($input.json('$')))
#set($body = "
#foreach ($mapEntry in $payload.entrySet())
""$mapEntry.key"": ""$mapEntry.value"",
#end
""href"": ""$payload.id""
")
$body
【讨论】:
以上是关于向 VTL 中的对象添加键/值对(用于 API 网关)的主要内容,如果未能解决你的问题,请参考以下文章