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