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小时内删除。
发表评论