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

Specifying Numbers in VTL on AMS 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 returns 字符串,用 {} 和前缀分隔:

{S=some text}
{N=10000000500}

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

我如何处理这个系统中的数字?

未记录,但您可以在映射模板中的字段名称后简单地指定类型:

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

请注意,字符串字段需要用引号分隔。