簡體   English   中英

Null值使用Spring Rest Resource更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM