fastjson反序列化过滤字段属性_全⾯总结Fastjson过滤字段、
排除字段的5种⽅法:含⽰例
1.通过注解指定不需要序列化的字段
在不需要序列化的字段,添加@JSONField(serialize = false)注解可进⾏排除。
public class DontSerializeAnnotation {    @JSONField(serialize = false)    private Long id;    private String name;    public Long getId() {        return id;    }    执⾏结果:fastjson怎么用
{"name":"guest"}复制代码
2.声明为transient的变量不进⾏序列化
如果被序列化的字段使⽤transient修饰,则不会被序列化。
public class TransientObject {    private Long id;    private transient String name;    public Long getId() {        return id;    }    public void setId(Long id) {        执⾏结果:
{"id":2}复制代码
3.使⽤属性过滤器排除不需要序列化的字段
使⽤过滤器SimplePropertyPreFilter,可以⼀次性设置1到多个需要过滤掉的字段。
3.1 过滤对象中的某个字段
public class User {    private Long id;    private String name;    public Long getId() {        return id;    }    public void setId(Long id) {        this.id = id;    }    pub 执⾏结果:
{"id":2}复制代码
3.2 过滤嵌套类中的相同名字的字段
Group中的User,参照上⼀⼩节。
public class Group {    private Long id;    private String name;    private List users = new ArrayList();    public Long getId() {        return id;    }    public void s 执⾏结果:
{"id":0,"users":[{"id":2},{"id":3}]}复制代码
3.3 使⽤多个属性过滤器排除不需要序列化的字段
如果只想过滤特定类中的字段,可以在创建过滤器的时候,指定对应类的class对象和字段。
下⾯⽰例,分别对Group和User创建⼀个过滤器,过滤掉不同的字段。
/** * 使⽤多个属性过滤器排除不需要序列化的字段. */@Testpublic void testExcludeMultiFilter() {    Group group = new Group();    group.setId(0L);    group.setName 执⾏结果:
{"name":"admin","users":[{"id":2},{"id":3}]}复制代码
4.使⽤属性过滤器包含需要序列化的字段.
有些时候,我们仅仅需要序列化个别字段,或者当需要排除的字段⽐序列化的字段还要多的时候,这时可以使⽤包含⽽⾮排除的过滤器。
/** * 使⽤属性过滤器包含需要序列化的字段. */@Testpublic void testIncludeMultiFilter() {    Group group = new Group();    group.setId(0L);    group.setName("admin 执⾏结果:
{"id":0,"users":[{"name":"guest"},{"name":"root"}]}复制代码
5.⾃定义属性过滤规则
在某些特殊的场景下,以上简单的排除或包含⽅式,并不能很好的满⾜实际的应⽤需求。
这时,可以考虑通过⾃定义属性过滤器,来实现过滤。这种实现⽅式⾮常灵活,可以根据实际的需求进⾏实现。
可以对类、字段名和字段值执⾏某种规则判断,来决定是否需要进⾏序列化。
具体⽅法,是实现PropertyFilter接⼝中的apply⽅法,返回true表⽰包含该字段,返回false表⽰过滤掉。
/** * @author wenshao[szujobs@hotmail] */public interface PropertyFilter extends SerializeFilter {    /**    * @param object the owner of the property. 字段所属/** * ⾃定义属性过滤规则,最灵活的⼀种实现字段和值过滤的⽅式。 */@Testpublic void testPropertyFilter() {    Group group = new Group();    group.setId(0L);    gr 执⾏结果:
{"id":0,"users":[{},{"id":3}]}复制代码

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。