在 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
]
请注意,字符串字段需要用引号分隔。
文档参考: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
]
请注意,字符串字段需要用引号分隔。