天天看點

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

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

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

1、@Transient

@[email protected]映射,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; }