fastjson過濾掉不需要返回的字段


使用場景

在項目中,后端查詢數據庫返回的字段需要過濾傳給前端,或者只需要一部分字段

方法一    new

newVO,DTO類,實體類來解決  (太老土的做法)

 

方法二   使用transient關鍵字  (密碼,和身份證號字段多使用)   

把需要過濾掉字段使用transient關鍵字修飾,這樣在調用JSON的toString方法時,被transient修飾的字段不會出現在最終的json字符串中

例子:   private transient String id;      (在多個接口中使用這個字段 ,如果不是都要過濾這個字段時候, 就不適合使用)

 

方法三   使用注解@JSONField(serialize=false)   作用和使用情況同方法二

例子: @JSONField(serialize=false) 

    private String id;

 

方法四  使用fastjson屬性過濾器SimplePropertyPreFilter    (推薦使用 更靈活)

           SimplePropertyPreFilter實現了PropertyPreFilter 

 

例子:  Student 相當於VO,DTO類或者實體類

要輸出字段為空的情況  增加一個參數 SerializerFeature.WriteMapNullValue

 

 

public class Student {

    /** 學號 */
    private long id;

    private String name;

    private int age;

    /** 年級 */
    private int grade;

    /** 專業 */
    private String major;

    /** 學校 */
    private String school;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

    public Student(long id, String name, int age, int grade, String major, String school) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.grade = grade;
        this.major = major;
        this.school = school;
    }

    
}
Student
public class Test {
    public static void main(String[] args) {

        List<Student> students = Arrays.asList(
    
                new Student(200123,"蘇明",20,1,"土木工程",null),
                new Student(200456,"張阿凡",21,2,"機械工程",null),
                new Student(200789,"范總",20,3,"計算機工程","蘇州工業大學")
            
                );
        //students模擬數據庫查出來的數據
        //指定要返回的字段    沒有在里面的字段就不會返回 達到過濾的效果
        String resultStr=filterFieldsJson(students,Student.class,"name","grade","school");
        
        System.out.println(resultStr);

    }
    //過濾方法  字段為空也輸出 增加一個參數 SerializerFeature.WriteMapNullValue
    public static String filterFieldsJson(Object src, Class<?> clazz, String... args) {
        SimplePropertyPreFilter filter = new SimplePropertyPreFilter(clazz, args);
        return JSON.toJSONString(src, filter,SerializerFeature.WriteMapNullValue);
    }
}


免責聲明!

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



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