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