如何在Velocity中添加一个字段到现有的JSON ?



我有一个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属性到inputJSON:

#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运行参数以增加安全性。

相关内容

  • 没有找到相关文章

最新更新