AWS速度模板 - 如何识别字符串或其他字符串

时间:2018-04-19 09:38:46

标签: aws-api-gateway velocity jsonpath velocity-template-language

在Amazon API网关中,我使用正文映射模板来转换请求。我发现跟踪逗号是很麻烦的(特别是有多个可选参数)所以我想出了以下内容:

{
    "context": { /* context params */ },
    "request": {
        #foreach($queryParam in $input.params().querystring.keySet())
            "$queryParam" : "$input.params().querystring.get($queryParam)"
            #if($foreach.hasNext),#end
        #end
    }
} 

我发现这个问题是当$input.params().querystring.get($queryParam)是一个整数(并且不应该用引号括起来)时它就不起作用了。这看起来很公平,但我如何改进这一点来检查$input.params().querystring.get($queryParam)是否是一个字符串,以便随后我可以用引号将其包装好?

请求

http://www.somewebsite.com/apiendpoint?id=4&name=Terry&aliases=[Tel,Terry]

转化

{
    "id": "4",
    "name": "Terry",
    "aliases": "[Tel,Terry]"
}

预期转型

{
    "id": 4,
    "name": "Terry",
    "aliases": ["Tel","Terry"]
}

1 个答案:

答案 0 :(得分:0)

然后你会做类似的事情:

{
    "context": { /* context params */ },
    "request": {
        #foreach($queryParam in $input.params().querystring.keySet())
            #set($value = $input.params().querystring.get($queryParam))
            #set($isNum = $value.matches('[-+]?\d+(\.\d+)?'))
            "$queryParam" : #if(!$isNum)"#end$value#if(!$isNum)"#end
            #if($foreach.hasNext),#end
        #end
    }
}