API网关映射模板将JSON字符串转换为逗号分隔的键=值对



映射模板新手。

使用此查询字符串作为输入:

用户id = foo& firstname = bar&蝙蝠lastname =

我需要POST数据到Kinesis作为JSON,因此:

{  
"userid":"foo",
"firstname":"bar",
"lastname":"bat"
}

然而,根据消费Lambda,它到达Kinesis时被转换成逗号分隔的键=值对,因此:

userid=foo, firstname=bar, lastname=bat

Google发现一些旧的论坛帖子概述了同样的问题,但没有解决方案。

这是我使用的映射模板:

{
#set($data = {
"userid":"$input.params('userid')",
"firstname":"$input.params('firstname')",
"lastname":"$input.params('lastname')"
})
"StreamName": "xyz",
"Data": "$util.base64Encode($data)",
"PartitionKey": "0"
}

似乎映射模板正在将$data字典转换为逗号分隔的键=值对列表。也许我应该构造一个JSON字符串而不是一个字典,但是,我认为这种行为必须是可配置的。如何指示系统构造JSON而不是KV?

这不是我想要的,但是,我可以通过构造字符串而不是字典来防止转换为KV,如下所示:

{
#set($data = "{
""userid"":""$input.params('userid')"",
""firstname"":""$input.params('firstname')"",
""lastname"":""$input.params('lastname')""
}")
"StreamName": "xyz",
"Data": "$util.base64Encode($data)",
"PartitionKey": "0"
}

我要把它留在这里,因为我确实不得不与它搏斗了一会儿。希望将来Google派人来的时候能帮上忙。

最新更新