1. 程式人生 > >Hibernate JPA中註解解釋 @Json Jackson常用

Hibernate JPA中註解解釋 @Json Jackson常用

一般情況下使用JSON只使用了java物件與字串的轉換,但是,開發APP時候,我們經常使用實體類來做轉換;這樣,就需要用到註解;

   Jackson預設是針對get方法來生成JSON字串的,可以使用註解來做一些特殊用途;常見的使用如下:

1、@Transient

對映,ORM框架將忽略該屬性;
如果一個屬性並非資料庫表的欄位對映,就務必將其標示為@Transient,否則ORM框架預設其註解為@Basic;

//表示該欄位在資料庫表中沒有

@Transient
public int getAge() {
 return 1+1;
}


2、@JsonIgnoreProperties

此註解是類註解,作用是json序列化時將java bean中的一些屬性忽略掉,序列化和反序列化都受影響。

3、@JsonIgnore

此註解用於屬性或者方法上(最好是屬性上),作用和上面的@JsonIgnoreProperties一樣。

4、@JsonFormat

此註解用於屬性或者方法上(最好是屬性上),可以方便的把Date型別直接轉化為我們想要的模式,比如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")

5、@JsonSerialize

此註解用於屬性或者getter方法上,用於在序列化時嵌入我們自定義的程式碼,比如序列化一個double時在其後面限制兩位小數點。

6、@JsonDeserialize

此註解用於屬性或者setter方法上,用於在反序列化時可以嵌入我們自定義的程式碼,類似於上面的@JsonSerialize

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1 排除屬性 @JsonIgnore,一般標記在屬性或方法上;作用於序列化與反序列化; @JsonIgnoreProperties,如果是代理類,由於無法標記在屬性或方法上,所以,可以標記在類宣告上;也作用於反序列化時的欄位解析; 2 屬性別名 @JsonProperty,序列化/反序列化都有效; 3 屬性排序 @JsonPropertyOrder,註釋在類宣告中; 4 屬性格式轉換 使用自定義序列化/反序列化來處理; @JsonSerialize,序列化; @JsonDeserialize,反序列化; 注意:在使用hibernate的時候,查詢資料庫後產生的實體類是個代理類,這時候轉換JSON會報錯; 解決方法有兩種: 1)設定FAIL_ON_EMPTY_BEANS屬性,告訴Jackson空物件不要拋異常; mapper.disable(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS); 2)使用@JsonIgnoreProperties註解 在實體類宣告處加上@JsonIgnoreProperties(value ={"hibernateLazyInitializer", "handler"})註解; 建議使用@JsonIgnoreProperties註解,這樣生成的JSON中不會產生多餘的欄位; 5 父/子關聯 @JsonManagedReference,放在父親類中; @JsonBackReference,放在孩子類中; 6 去掉包裝 @JsonUnwrapped,意思如下: Ability to map JSON like { "name" : "home", "latitude" : 127, "longitude" : 345 } to classes defined as: class Place { public String name; @JsonUnwrapped public Location location; } class Location { public int latitude, longitude; }