将键/值对添加到VTL中的对象(对于API网关)



我正在为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
}

相关内容

  • 没有找到相关文章

最新更新