我正在为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,但无济于事。
答案 0 :(得分: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
将是您想要的。
答案 1 :(得分:2)
以下方法可以解决问题。当心,未经测试!
{
#set($payload = $util.parseJson($input.json('$')))
#set($body = "{
#foreach ($mapEntry in $payload.entrySet())
""$mapEntry.key"": ""$mapEntry.value"",
#end
""href"": ""$payload.id""
}")
$body
}
答案 2 :(得分:0)
类似的东西对我有用:
#set($body = $input.path('$'))
#set($body.href = "https://example.tld/thingy/$body.id")
$input.json('$')