我正在为AWS API网关集成响应编写映射模板。我想在JSON对象返回我的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用户指南,但无济于事。
类似的东西对我有用:
#set($body = $input.path('$'))
#set($body.href = "https://example.tld/thingy/$body.id")
$input.json('$')
没有简单的方法来实现这一目标,但是您可以解决:
## 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
将是您想要的。
以下可以解决问题。当心,未经测试!
{
#set($payload = $util.parseJson($input.json('$')))
#set($body = "{
#foreach ($mapEntry in $payload.entrySet())
""$mapEntry.key"": ""$mapEntry.value"",
#end
""href"": ""$payload.id""
}")
$body
}