【问题标题】:AWS velocity template - How to discern between string or otherAWS 速度模板 - 如何区分字符串或其他
【发布时间】: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


【解决方案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
    }
}

【讨论】:

  • 如果参数是一个字符串,但其中只有数字,这不会失败吗?例如。英国车牌通常有字母,但也可以个性化,只包含数字
  • @ediblecode 由您选择正确的标准。除了提案,您还可以根据字段名称决定显示字符串或数字。比如:#set($fieldIsNumber = {'plate' : false, 'km': true}),然后你将使用#set($isNum = $fieldIsNumber[$queryParam]) ,而不是正则表达式。
猜你喜欢
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多