在AMS API网关上指定VTL中的数字

时间:2016-03-02 09:45:30

标签: aws-api-gateway

文档参考:http://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings.html

在AMS VTL中,可以指定模型模式中的字典字段:

"field1" : {"type":"string"},
"field2" : {"type":"number"},

所以映射模板可以填充这样的字段:

#set($inputRoot = $input.path('$'))
"questions" :
[
#foreach($elem in $inputRoot)
{
  "field1" : "$elem.field1",
  "field2" : $elem.field2
}#if($foreach.hasNext),#end
#end
]

然而......我的iOS应用抱怨收到的数据不是JSON格式。如果我在$elem.field2附近添加引号,那么iOS会接受JSON并将所有字段转换为字符串。

我的Lambda函数正在返回一个标准的JSON字典列表,其中field2定义为整数。

但是APIG会为我的所有字段返回字符串,并以{}和前缀分隔:

{S=some text}
{N=10000000500}

所以我可以看到field2不是数字而是字符串{N=10000000500}

如何处理此系统中的数字?

1 个答案:

答案 0 :(得分:1)

Undocumented but you can simply specify the type after the field name in a mapping template:

#set($inputRoot = $input.path('$'))
"questions" :
[
#foreach($elem in $inputRoot)
{
  "field1" : "$elem.field1.S",
  "field2" : $elem.field2.N
}#if($foreach.hasNext),#end
#end
]

Note that string fields need to be delimited in quotes.