有此MongoBean:SuperBean偏字段更新REST API
class SuperBean extends MongoBaseBean{
private String id;
private String title;
private String parent;
//And getters, setters
}
需要的是寫的更新的API,其能夠執行局部屬性的更新。在網絡上看到的以及從同行聽到的常見方法是檢查請求中的字段是否爲空,如果不爲空則更新。但是如果更新請求是爲了將值更新爲Null?
一些討論之後,我們提出了三種方法:
設置默認值在bean領域。因此,而不是非空的父字段,如果它沒有在請求中$,這將被視爲更新。
class SuperBean extends MongoBaseBean{ private String id; private String title; private String parent = "$"; //And getters, setters }
讓更新API實現接受一個Map。實際的bean被提取並且所有出現在請求映射中的字段都將被更新。
@Post public SuperBean updatePartial(Map<String,Object> dataObject) {}
讓更新API接受包含2個映射的DTO。一個包含舊值,另一個包含新值。這在情況下可能是有利的,只有當數據庫包含oldDataObj中發送的值時纔會發生更新。但是這會增加有效載荷的大小。
class SuperBeanUpdateDTO { private Map<String, Object> oldDataObj; private Map<String, Object> newDataObject; //getters, setters } @Post public SuperBean updatePartial(SuperBeanUpdateDTO updateDTO) {}
哪些因素應該考慮到這些選擇的方法之一?有沒有更好的方法來解決這個問題?