該場景很簡單: UI調用RESTful API來獲取對象樹,然後UI更改一些數據並調用RESTful API來更新它。在RESTful API中合併兩個Java bean的最佳方式是什麼?
但是出於安全或性能方面的原因...,我的RESTful API無法將整個對象樹引入UI。
我們有兩種選擇:爲RESTful API創建單獨的Java Bean,或者擴展現有的商業Java Bean和@JsonIgnore。
第二個看起來更聰明,因爲我們重新使用商務艙。
但現在我們遇到了麻煩:我需要將UI中的對象與DB中的對象合併,否則我會丟失一些數據。
但是我怎麼知道哪一段數據會來自UI? 我知道我可以硬編碼一個一個地複製字段。 但這種方式很危險。
我在尋求通用的方法來避免硬代碼複製字段。
我嘗試了org.apache.commons.beanutils.BeanUtils,但它不能滿足要求,因爲它總是覆蓋目標字段。
所以我這樣想:
如果UI bean中的字段不是Null,那麼覆蓋目標bean中同名字段的值。但如果字段是某種像int這樣的默認值爲0的基本類型,我該如何處理? 我不知道該字段是否真的帶有UI值0,或者不是從UI返回。
我試圖將原始類型轉換爲對象類型,但它仍然有布爾類型的問題,許多java工具不支持「Boolean isValid(){...}」像BeanUtils。這種轉換在現有的代碼中是危險的。
我想這些代碼:
JacksonAnnotationIntrospector ai = new JacksonAnnotationIntrospector();
AnnotatedClass ac = AnnotatedClass.construct(MyClassDTO.class, ai, null);
String[] ignoredList = ai.findPropertiesToIgnore(ac);
for(String one: ignoredList){
System.out.println(one);
}
但ignoredList總是空。我正在使用傑克遜1.9.2
你能與反思這樣做?像讀取你的ui-bean中的所有字段並將它們傳送到數據庫bean?你能舉一個簡單的例子嗎? – Ria 2015-03-31 17:05:00
到Ria:我知道如何以通用的方式合併java bean,但我需要知道哪些字段來自UI。 – Justin 2015-03-31 17:22:08
好了,現在我明白了。只是一些頭腦風暴:添加一個列表到傳遞的對象,其中包含用戶更改的字段名稱? – Ria 2015-03-31 17:29:28