使用場景
在項目中,后端查詢數據庫返回的字段需要過濾傳給前端,或者只需要一部分字段
方法一 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; } }
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); } }