我有一个JSON来自请求体,我正试图使用VTL通过添加一个额外的字段来映射它。请求正文如下所示:
{
"name": "John",
"age": 20,
"address": {
"street": "Albert's Street",
"City": "Test City"
}
}
在AWS中,我试图将这个请求体映射到一个来自URL路径参数的额外字段,变成这样:
{
"name": "John",
"age": 20,
"address": {
"street": "Albert's Street",
"City": "Test City"
},
"operation": "$input.params('path.operation')"
}
我试过用这样的东西循环,但效果不太好:
#set($allParams = $input.path('$'))
{
#foreach($type in $allParams.keySet())
#set($params = $allParams.get($type))
"$type" : {
#foreach($paramName in $params.keySet())
"$paramName" : "$util.escapeJavaScript($params.get($paramName))"
#if($foreach.hasNext),#end
#end
}
#if($foreach.hasNext),#end
#end
}
此外,这只适用于JSON中有2个级别的那些。它不适用于JSON的第一层,或者如果我碰巧在JSON有效负载中有超过2层。
我所需要的只是在JSON有效负载的现有请求体中再添加一个字段。在Velocity中怎么做呢?
您可以像这样添加operation
属性到input
JSON:
#set ($input.path('$').operation = 'example')
$input.json('$')
对于您的示例,上面的结果如下:
{
"name": "John",
"age": 20,
"address": {
"street": "Albert's Street",
"City": "Test City"
},
"operation": "example"
}
当然,您可以使用params
中的值来代替'example'
。
顺便说一下,考虑通过$util.escapeJavaScript
运行参数以增加安全性。