Pertanyaan Menambahkan pasangan kunci / nilai ke objek di VTL (untuk API Gateway)


Saya menulis template pemetaan untuk respons integrasi AWS API Gateway. Saya ingin menambahkan pasangan kunci / nilai ke objek JSON mengembalikan fungsi Lambda saya.

Fungsi saya mengembalikan beberapa JSON seperti ini:

{
  "id": "1234",
  "name": "Foo Barstein"
}

Saya ingin template untuk menghasilkan sesuatu seperti ini:

{
  "id": "1234",
  "name": "Foo Barstein",
  "href": "https://example.tld/thingy/1234"
}

Dan template pemetaan saya terlihat seperti ini:

#set($thingy = $input.json('$'))
#set($thingy.href = "https://example.tld/thingy/$thingy.id")

$thingy

Namun, template saya menghasilkan yang tidak dimodifikasi $thingy, tanpa href Saya telah mencoba menambahkan.

Saya sudah membaca Panduan pengguna VTL, tetapi tidak berhasil.


4
2017-12-07 10:10


asal


Jawaban:


Tidak ada cara mudah untuk mencapai ini tetapi Anda dapat mengatasinya:

## Mapping template
#set($body = $input.body)
#set($id = $input.json('$.id'))
{
  "custom": {
    "href" : "https://example.tld/thingy/$id"
  },
  "body": $body
}

Dan kemudian gabungkan semua kunci di AWS.Lambda (jika Anda menggunakan Lambda):

## Lambda handler
exports.handler = function(event, context) {
  const requestParams = Object.assign({}, event.body, event.custom);
  // ... function code
}

Dan requestParams akan menjadi apa yang kamu inginkan.


1
2017-08-16 15:19