Jackson相關:
使用Jackson相關的注解時一定要注意自己定義的屬性命名是否規范。
命名不規范時會失去效果。(例如Ename ,Eage 為不規范命名。“nameE”,“ageE”為規范命名)我在此處掉坑半個小時。至於命名規范,大家自己搜索。其實不要太奇葩的命名都是可以得。
如果使用@JsonIgnore注解不起效時請注意一下你的屬性名字是否規范
1、@JsonIgnoreProperties
此注解是類注解,作用是json序列化時將java bean中的一些屬性忽略掉,序列化和反序列化都受影響。
寫法將此標簽加在model 類的類名上 ,可以多個屬性也可以單個屬性
//生成json時將name和age屬性過濾
@JsonIgnoreProperties({"name"},{"age"})
public class user {
private String name;
private int age;
}
//生成json時將name和age屬性過濾
@JsonIgnoreProperties({"name"},{"age"})
public class user {
private String name;private int age;
}
2、@JsonIgnore
此注解用於屬性或者方法上(最好是屬性上),作用和上面的@JsonIgnoreProperties一樣。
生成json 時不生成age 屬性
public class user { private String name; @JsonIgnore private int age; }
3、@JsonFormat
此注解用於屬性或者方法上(最好是屬性上),可以方便的把Date類型直接轉化為我們想要的模式,比如@JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)
4、@JsonSerialize
此注解用於屬性或者getter方法上,用於在序列化時嵌入我們自定義的代碼,比如序列化一個double時在其后面限制兩位小數點。
又比如可以實現date數據轉換成long型數據等功能,該注解作用在屬性的getter()方法上
用於在序列化時嵌入我們自定義的代碼,比如序列化一個double時在其后面限制兩位小數點。因為在java中日期時期的時間戳是ms,我現在需要將ms轉換為s,就需要將ms/1000
package com.whf.utils.serializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.util.Date; import java.io.IOException; /** *該類可以將data轉換成long類型 */ public class Data2LongSerizlizer extends JsonSerializer<Date> { @Override public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { //將毫秒值轉換成秒變成long型數據返回 jsonGenerator.writeNumber(date.getTime()/1000); }
//創建時間 @JsonSerialize(using = Data2LongSerizlizer.class ) private Date createTime; //更新時間 @JsonSerialize(using = Data2LongSerizlizer.class ) private Date updateTime;
這樣就完成了時間戳13位到10位的轉換
5、@JsonDeserialize
此注解用於屬性或者setter方法上,用於在反序列化時可以嵌入我們自定義的代碼,類似於上面的@JsonSerialize
6、@Transient
@[email protected]�射,ORM框架將忽略該屬性;
如果一個屬性並非數據庫表的字段映射,就務必將其標示為@Transient,否則ORM框架默認其注解為@Basic;
//表示該字段在數據庫表中沒有
@Transient public int getAge() { return 1+1; }
