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

相关文章