Hibernate JPA 常用註解(JsonSerialize相關)

以下幾個註解主要來自於JACKSON包的註解.

jackson-databind-x.x.x.jar

後臺查詢出來的數據,有時不需要直觀的展示到前臺,像時間(Date,Timestamp)或者Double(取精度)的時候,需要轉化下推送給前臺..這時轉化成json的時候需要做些處理.

Hibernate JPA中常用的註解主要有:@Transient,@JsonIgnoreProperties,@JsonIgnore,@JsonFormat,@JsonSerialize,@JsonDeserialize

 

@Transient

表示該屬性不是實體類對應的數據庫表中的字段,ORM框架將忽略該屬性的數據庫匹配;

註解了@Transient的字段在數據庫映射時,不會參與映射..無註解時,ORM框架默認其註解爲@Basic(很恐怖吧)

@JsonProperty

個人感覺這個註解也是一個蠻好用的註解;該註解的作用域是屬性上,匹配value值.前臺指定的數據類型不符時,使用@JsonProperty進行轉換.如後臺實體類上使用的是telphone,因爲很多地方已經使用了...修改的話比較麻煩,而現在要求使用的是phone,所以用該註解就賊爽了.....

@JsonProperty(value = "phone")
private String telphone;

@JsonIgnoreProperties和@JsonIgnore

 

@JsonIgnoreProperties是類註解,作用於在類上,多個值時,用value值來執行忽略@JsonIgnoreProperties(value = {"fullName", "comment"})

@JsonIgnore

用於屬性或者方法上(最好是屬性上),生成json格式的數據時,忽略當前作用域的屬性值;

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

@JsonFormat

@JsonFormat作用域在屬性或者方法上.可以方便的把Date類型直接轉化爲我們想要的模式.如@JsonFormat(pattern="yyyy-MM-dd HH-mm-ss")

@JsonSerialize

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

@JsonDeserialize

@JsonDeserialize註解用於屬性或者getter方法上面,用於在反序列化時嵌入茲定於的代碼.與@JsonSerialize相反

 

DEMO:

一開始寫代碼的時候就是因爲一個實體類的中的時間屬性,返回給前臺是時間戳(Timestamp)的類型,導致前臺展示很垃圾...

後來想自己封裝一個實體類,重新轉化下這個結果集,但是因爲一個字段,導致要新建很多的實體類對象..很是尷尬..

想java肯定能實現這種方式,所以就有了上文的這一塊東西...

附轉化代碼:

實體類中的一個屬性

@JsonSerialize(using=DateSerialize.class)
private Timestamp startTime;

DateSerialize實現接口類

public class DateSerialize extends JsonSerializer<Timestamp>{
 @Override
public void serialize(Timestamp timestamp,JsonGenerator jsonGenerator,SerializerProvider serializerProvider) throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(new Date(timestamp.getTime())));
}
}

這樣直接將對象或者對象數組返回給前臺的結果中就是我們在DateSerialize中約束的yyyy-MM-dd HH:mm:ss格式了...

 

同理,如果要使用Double保留指定的精度問題也是如此;

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章