註解@JsonIgnore的使用方法效果及其他相關注解應用

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

使用方法:一般標記在屬性或者方法上,返回的json數據即不包含該屬性。

場景模擬:

需要把一個List<HistoryOrderBean>轉換成json格式的數據傳遞給前臺。但實體類中基本屬性字段的值都存儲在快照屬性字段中。此時我可以在業務層中做處理,把快照屬性字段的值賦給實體類中對應的基本屬性字段。最後,我希望返回的json數據中不包含這兩個快照字段,那麼在實體類中快照屬性上加註解@JsonIgnore,那麼最後返回的json數據,將不會包含goodsInfo和extendsInfo兩個屬性值。

public class HistoryOrderBean {

    //基本屬性字段
    private String insurantName;
    private String insuranceName;
    private String insurancePrice;
    private String insurancePicture;
    private String insuranceLimit;

    //快照屬性字段
    @JsonIgnore
    private String goodsInfo;      //快照基本信息
    @JsonIgnore  
    private String extendsInfo;    //快照擴展屬性信息

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
4.註解失效: 
如果註解失效,可能是因爲你使用的是fastJson,嘗試使用對應的註解來忽略字段,註解爲:@JSONField(serialize = false),使用方法一樣。
 

 

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;
}
1
2
3
4
5
6
7
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時在其後面限制兩位小數點。

5、@JsonDeserialize

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

6、@Transient

@[email protected]映射,ORM框架將忽略該屬性; 
如果一個屬性並非數據庫表的字段映射,就務必將其標示爲@Transient,否則ORM框架默認其註解爲@Basic;

//表示該字段在數據庫表中沒有

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

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