最近幾個項目都用的fastjson,前陣子遇到這個問題的時候我本覺得是很是簡單,百度一下幾秒鐘的事。結果網上的答案是真TM的坑,要麼文不對題,要麼根本就是錯的,並且還抄來抄去。坑了我幾個小時。如今記下來一是之後忘了回來看下,二是讓後來者少走彎路,但願他們能早點看到這片文章把。java
那些坑人的垃圾文章有以下幾個特徵:json
隨便在網上搜搜看,不少文章都是這樣並且高度類似的。我想要的是一個自由的、不依賴註解的、通用的、不侵入的、自定義的解決方案。方法以下:app
1. 先定義個bean:函數
public class Person implements Serializable{ private static final long serialVersionUID = -2414273235642766924L; private String name; private String sex; private int age; private Person father; public Person() { } public Person(String name, String sex, int age) { this.name = name; this.sex = sex; this.age = age; } //省略getter和setter }
注意:序列化的bean類須要有默認的無參構造函數,不然fastjson在使用反射的時候會報錯。this
2. 通用方法:code
private static JSON toJson(Object o, String... excludeKeys) { List<String> excludes = Arrays.asList(excludeKeys); SimplePropertyPreFilter filter = new SimplePropertyPreFilter(); filter.getExcludes().addAll(excludes); //重點!!! return JSON.parseObject(JSON.toJSONString(o, filter)); }
String... 能夠方便的自定義你想要過濾的屬性對象
3. 示例:rem
public static void main(String[] args) { Person child = new Person("mike", "male", 10); Person father = new Person("jimmy", "male", 37); child.setFather(father); JSON json = toJson(child, "name", "age"); System.out.println(json); }
4. 結果:get
{"father":{"sex":"male"},"sex":"male"}
能夠看到成功過濾了某些屬性,並且連引用對象的相關屬性也過濾掉了,實現了深層過濾。io