jackson中的@JsonBackReference和@JsonManagedReference,以及@JsonIgnore均是為了解決對象中存在雙向引用導致的無限遞歸(infinite recursion)問題。這些標注均可用在屬性或對應的get、set方法中。
@JsonBackReference @JsonManagedReference
經常和@JsonManagedReference通常配對使用,通常用在父子關系中。
@JsonBackReference標注的屬性在序列化(serialization,即將對象轉換為json數據)時,會被忽略(即結果中的json數據不包含該屬性的內容)。
@JsonManagedReference標注的屬性則會被序列化。
在序列化時,@JsonBackReference的作用相當於@JsonIgnore,此時可以沒有@JsonManagedReference。
但在反序列化(deserialization,即json數據轉換為對象)時,
如果沒有@JsonManagedReference,則不會自動注入@JsonBackReference標注的屬性(被忽略的父或子);
如果有@JsonManagedReference,則會自動注入自動注入@JsonBackReference標注的屬性。
@JsonIgnore
@JsonIgnore:作用是進行JSON操作時忽略該屬性,以斷開無限遞歸,序列化或反序列化均忽略。當然如果標注在get、set方法中,則可以分開控制,序列化對應的是get方法,反序列化對應的是set方法。
在父子關系中,當反序列化時,@JsonIgnore不會自動注入被忽略的屬性值(父或子),這是它跟@JsonBackReference和@JsonManagedReference最大的區別。
@JsonIgnoreProperties
在類的頭部統一聲明忽略的屬性,如:
@JsonIgnoreProperties({ "extra", "uselessValue" }) public class Value { public int value; }
對於意外的位置屬性,也可以忽略
@JsonIgnoreProperties(ignoreUnknown=true) public class PojoWithAny { public int value; }
@JsonFormat
@JsonFormat 此注解用於屬性上,作用是把Date類型直接轉化為想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。
@JsonProperty
此注解用於屬性上,作用是把該屬性的名稱序列化為另外一個名稱,如把trueName屬性序列化為name,@JsonProperty("name")。