jackson JSON物件對映出多餘欄位的bug

2021-09-01 21:11:19 字數 752 閱讀 3804

呼叫方法

try catch (jsongenerationexception e) catch (ioexception e)

類:

class a implements serializable

/*** @param a the a to set

*/public void seta(integer a)

/*** @return the b

*/public integer getb()

/*** @param b the b to set

*/public void setb(integer b)

}

產生json串: 可以看出這裡多了乙個b欄位。

歸根溯源的debug了十幾層呼叫(jackson真心複雜過度了),定位到這個地方:

org.codehaus.jackson.map.introspect.pojopropertiescollector._addmethods()

其原理是反射訪問class, 1獲取可訪問的public欄位。2.獲取get/set方法,並根據最低階的常理來推斷出字段。

常理是什麼? getfield()方法,對應field欄位。 這裡也就是出現b欄位的根源。

這框架是springmvc整合的,返回json物件非常方便,所以在定義頁面物件po的時候,還是要小心的變數命名, 小寫開頭。

物件關係對映

雙向一對一對映 class card 把關係的維護交給多方物件的屬性去維護關係 c 關係的擁有方負責關係的維護,在擁有方建立外來鍵。所以用到 joincolumn cascade 設定級聯關係,這種關係是遞迴呼叫 可以是 cascadetype.persist 級聯新建 cascadetype.re...

物件關係對映

雙向一對一對映 class card 把關係的維護交給多方物件的屬性去維護關係 c 關係的擁有方負責關係的維護,在擁有方建立外來鍵。所以用到 joincolumn cascade 設定級聯關係,這種關係是遞迴呼叫 可以是 cascadetype.persist 級聯新建 cascadetype.re...

物件到物件對映 AutoMapper

用來解決乙個看似複雜的問題,這種型別的 編寫起來相當枯燥乏味,官方文件 入門 或動態服務位置,用於基於例項的容器 包括子容器 巢狀容器 或標記型別 public class employeescontroller當然還有很多可擴充套件性,比如 有時,您需要完全控制從一種型別到另一種型別的轉換。通常,...