[英]Null values update with Spring Rest Resource
有一個用RestResource注釋的類(Spring 3.1,Jackson 2.3)。 當我們嘗試像這樣保存對象A時
A: {"prop1":1, "prop2":2}
它保存成功。
我們有以下代碼:
A.setProp2(null);
EntityService.patch(A);
A: {"prop1":1, "prop2":null}
執行EntityService.patch(A)之后,數據庫(Oracle 11g)中沒有任何更改,但是我們希望DB prop2中的值也等於null。
這是正常行為嗎(我認為可能是這樣,因為空值可能理解為不變)? 有沒有簡單的方法可以改變這種行為?
在談論HTTP動詞時, PATCH
請求描述了應該與現有對象進行的區別。 這樣做是為了使您可以輕松創建部分更新,而無需通過REST公開特定的資源屬性。
在Spring框架中,在PATCH
請求的上下文中,屬性的null
值意味着不應對該屬性進行任何更改。 我猜想spring數據剩余會將此邏輯傳遞給服務層,因此,為了實際使用null
值更新資源,您應該發出與PUT
語義相對應的調用
因此,以上答案是正確的。
不幸的是,PUT方法會更新所有字段,在某些情況下可能是一個不好的解決方案。 例如,如果我們在JSON對象中有很多空值,則該空值未被修改。
為了使Spring PATCH僅在更改時更新空值,我發現的最佳方法是擴展DomainObjectMerger類。 它是REST MVC配置的bean,在其中我們可以重寫方法合並(entity.doWithProperties(new SimplePropertyHandler(){})。在此方法中,我們可以添加附加條件,例如
sourceValue != targetValue;
與sourceValue變量的null值無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.