2017-06-29 46 views
0

我已经联系AWS支持,并被告知目前不可能,但是,我很难相信并希望获得第二种意见。API网关集成响应模型模板 - 删除属性

我的情况是这样的:

我现在有一个API,我们使用的请求和响应两者模型模板......东西看起来像这样(的合并请求中):

#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") 

,并有一些变化。

有没有其他人有可能的解决方案?

感谢

回答

1

不幸的是,API网关不支持从身体JSON格式消除物业本身,但你可以做到这一点通过.replaceAll(“正则表达式”,“更换”),像字符串操作一样。

如果你想删除从您的JSON体命名为test2的的属性,你可以这样定义模板,

模板:

#set($propertyRegex = ',?\s*"?test2"? *: *"?\w*"?') 
$input.body.replaceAll($propertyRegex, "") 

改造前:

{ 
    "test1" : "value1", 
    "test2" : "value2", 
    "test3" : "value3" 
} 

改造后:

{ 
    "test1" : "value1", 
    "test3" : "value3" 
} 

我希望它能帮助

+0

它将作为字符串返回。你需要在模板或客户端中使用JSON对象吗?如果您的应用程序/客户端需要JSON对象,则可以将JSON字符串解析为对象。 –

+0

因此,在读出它之前,没有办法将对象解析为Json?类似'$ util.parseJson()'方法? http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html – Hexie

0

虽然嘉侯鸿已经回答了这个问题,我发现了另一种方式来达到同样的事情,而不必使用正则表达式,如果其他人是永远感兴趣。

要彻底删除属性,我们必须将其作为对象来处理。例如,您可以使用$ input.path(x)方法[1]来获取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 Support确认)没有本机函数将字符串转换回JSON,因此,您需要手动或通过使用以上为每个片段。我仍然试图找出解决这个问题的另一种方法。