我已经联系了AWS的支持,并被告知,这是目前不可能的,但是,我很难相信,并希望第二种意见。
我的情况是:
我现在有一个API,我们对请求和响应都使用模型模板.类似于这样的内容(在Integration中):
#set($input = $input.body)
#set( $newbody = $input.replace("CostRecoveryGUID",
"CostRecoveryId").replace("InvoiceItemGUID", "InvoiceItemId"))
$newbody这将像预期的那样返回模型,但是,它首先替换了几个属性名称--这非常好。
我希望接收body对象(在响应中),并从响应中删除整个属性。我知道这可能听起来很奇怪,但这是必要的。
因此,假设相同的代码-我尝试了这样的东西:
#set($input = $input.body)
#set( $newbody = $input.replace("CostRecoveryGUID",
"CostRecoveryId").replace("InvoiceItemGUID",
"InvoiceItemId").remove("PropertyName"))
$newbody但不幸的是没起作用。
我也试过
#set( $newbody = $newbody.delete("PropertyName") 还有一些变化。
还有其他人有可能找到解决办法吗?
谢谢
发布于 2017-06-30 07:59:26
不幸的是,API不支持以JSON格式从主体中删除属性,但是可以通过使用.replaceAll("regex“、”替换“)来实现这一点,就像字符串操作操作一样。
如果要从JSON主体中删除名为test2的属性,可以像这样定义模板,
模板:
#set($propertyRegex = ',?\s*"?test2"? *: *"?\w*"?')
$input.body.replaceAll($propertyRegex, "")转型前的:
{
"test1" : "value1",
"test2" : "value2",
"test3" : "value3"
}转型后的:
{
"test1" : "value1",
"test3" : "value3"
}我希望它能帮上忙
发布于 2017-07-03 02:34:23
虽然梁家厚已经回答了这个问题,但如果有其他人感兴趣的话,我找到了另一种方法来实现同样的目标,而不用使用Regex。
要完全移除属性,我们必须将其视为对象。例如,您可以使用$input.path(x) method1来获取JSON的对象表示。一旦我们有了一个对象,我们就可以在对象上执行与对象相关的方法,比如“删除”。下面的片段:
##get an object representation of the JSON string
#set($input = $input.path('$'))
##This removes property obj1 from the input json
#set($val = $input.remove("obj1"))
##reconstruct the JSON from the object if required
{
#foreach($key in $input.keySet())
#set($x = $input.get($key))
"$key": "$x"
#end
}测试:
当我给出以下输入体时,
{
"obj1": "1st object",
"obj2": "2nd object"
}在转换之后,我能够获得以下端点请求主体:
{
"obj2": "2nd object"
}也就是说,obj1被删除了。
注释:--这将返回一个字符串结果,并且当前(通过AWS支持确认)没有将字符串转换回JSON的本机函数,因此,您需要手动地或通过对每个片段使用上面的代码来构建它。我还在试图找出另一种解决办法。
https://stackoverflow.com/questions/44815145
复制相似问题