json通過注解來過濾某些屬性


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;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM