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 

fastjson过滤掉不需要返回的字段

例子:  Student 相当于VO,DTO类或者实体类

fastjson过滤掉不需要返回的字段

要输出字段为空的情况  增加一个参数 SerializerFeature.WriteMapNullValue

fastjson过滤掉不需要返回的字段

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);
    }
}