以下幾個註解主要來自於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保留指定的精度問題也是如此;