Шаблон скорости 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
}
}