2017-06-29 41 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,因此,您需要手動或通過使用以上爲每個片段。我仍然試圖找出解決這個問題的另一種方法。