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