Шаблон скорости AWS - Как различить строку или другое

В шлюзе 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 ответ

Тогда вы бы сделали что-то вроде:

{
    "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
    }
}
Другие вопросы по тегам