2015-08-17 57 views
2

鑑於這樣的具有自引用以下類(通過連接表):如何序列化與傑克遜的循環引用?

class User { 
    List<User> followers; 
    List<User> leaders; 

    // Getters and Setters... 
} 

如何配置傑克遜允許雙向序列化?使用@JsonManagedReference@JsonBackReference只允許用@JsonManagedReference註釋的字段/吸氣劑的序列化。

+0

追隨者列表應該被序列化爲一個以User爲元素的數組。 – MaxZoom

回答

0

對於完整的身份識別處理,您需要使用@JsonIdentityInfo註釋。它允許更一般地處理循環依賴關係,而不僅僅是嚴格的父母/子女關係。

+0

我之前使用'@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property =「id」)'註釋了User類,其中id是每個User實例中的唯一屬性。即使這個註釋序列化由於循環引用而失敗。我是否配置了註釋錯誤,或者應該將它放在List字段上? – Ari

+0

它們應該只爲'User'類/接口定義,因爲沒有辦法只將這些用於特定的'List'或'Map'的內容。對於POJO,可以選擇將它們定義爲字段。但是,一個常見問題是將List作爲根值序列化(即,作爲ObjectMapper序列化的值)。這可能會導致Java Type Erasure出現問題,最好的做法是(IMO)總是使用POJO作爲根值,因爲這確保了完整的「List」類型可用。有可能使'List'根值工作,只需要更多的工作。 – StaxMan