我使用傑克遜1.9.2與Hibernate/Spring MVC通過MappingJacksonHttpMessageConverter。傑克遜混淆雙向一對多關係
傑克遜無法序列化雙向一對多關係,並造成無限循環。
我使用的類是:
對話具有設置短信實例。
每個SMS實例都有一套PHONENUMBERS
的每******中國有一個父接觸(這是雙向的多對一的關係)
我所試圖做的是序列化對話。
如果我不使用@JsonManagedReference和@JsonBackReference那麼傑克遜將因無限循環crashe。但是當我使用它們時,聯繫人沒有被序列化到PhoneNumber。
Class Contact { @JsonManagedReference List<PhoneNumber> phoneNumber ; } Class PhoneNumber { @JsonBackReference Contact contact; }
的輸出是:
{ <--------------------- Conversation "id": 51, "smsSet": [ { "id": 53, "origin":, "destination": "06533844XY", "message": "Hello world!", "phoneNumbers": [ { "id": 64, "num": "06533844XY", "creationDate": 1333992533000, } ], } ], "creationDate": 1333992534000 }
代替
{ <---------- conversation "id": 51, "smsSet": [ { "id": 53, "origin":, "destination": "06533844XY", "message": "Hello world!", "phoneNumbers": [ { "id": 64, "num": "06533844XY", "creationDate": 1333992533000, "contact": <--------------------- Missing part { "id": 12, "name": "Samuel Jackson", "primaryNumber": "06533844XY" } } ], } ], "creationDate": 1333992534000 }
我使用的是通用版本,stackoverflow編輯器吞噬了<。我認爲發生的事情是@JsonBackReference首先被序列化。 – redochka 2012-04-11 21:31:30
好的。是的,這似乎更可能;否則錯誤將會不同。 – StaxMan 2012-04-11 23:11:42