【发布时间】:2018-04-22 21:14:53
【问题描述】:
在 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"]
}
【问题讨论】:
-
如果尝试将 0 添加到字符串中,VTL 会做什么? if value + 0 == value 可能用作“看起来像整数”的测试。或者您可以在末尾放置一个虚拟参数,这使得跟踪逗号不再是一个问题,因为最后一个真实参数后面有一个逗号,然后是
"dummy": true }生成有效的 JSON。随机想法供您考虑。或者嵌套一些 if 测试以将当前参数与已知数字参数列表进行比较并相应地引用。 -
不清楚是
$queryParam还是$input.params().querystring.get($queryParam)有问题。你能向我们展示预期生成的内容与实际生成的内容吗? -
@ClaudeBrisson 感谢您的指点,请参阅编辑
标签: aws-api-gateway velocity jsonpath velocity-template-language