FastJson toString过滤指定的对象属性
最近在做一个需求时,遇到一个问题,在把Java对象用fastjson转成json字符串时,需要过滤掉Java对象中的指定属性,通过搜索资料,解决了该问题,这里做个总结,具体实现可以参考本文中介绍的几种方式。 数据样例本文中用到的Java对象结构和使用的对象实例分别如下: 对象结构public class Persion {
private String id;
private String name;
private int age;
public Persion(String id,String name,int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String 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;
}
}
对象实例Persion persion = new Persion("10010","jason",101);
正常的json字符串如下:{"age":101,"id":"10010","name":"jason"}
一、使用transient关键字把需要过滤掉属性使用 private transient String id;
再调用 {"age":101,"name":"jason"}
二、使用注解还是以 @JSONField(serialize=false)
private String id;
同样,再调用 {"age":101,"name":"jason"}
三、使用属性过滤器PropertyFilter使用过滤器 //创建Java对象
Persion persion = new Persion("10010",101);
//创建PropertyFilter对象,并重载apply方法
PropertyFilter propertyFilter = new PropertyFilter(){
boolean flag = true;
@Override
public boolean apply(Object obj,Object value) {
if(name.equalsIgnoreCase("id")){
flag = false;
}
return flag;
}
};
//调用toJSONString方法时,传入PropertyFilter对象
String jsonStr = JSON.toJSONString(persion,propertyFilter);
得到的json字符串如下: {"age":101,"name":"jason"}
PropertyFilter属性过滤器说明:(1)当apply方法返回TRUE时,该属性输出到json字符串中,apply方法的Java doc如下: /**
* @param object the owner of the property
* @param name the name of the property
* @param value the value of the property
* @return true if the property will be filtered out,false otherwise
*/
boolean apply(Object object,String name,Object value);
(2)可以同时使用 @Override
public boolean apply(Object obj,Object value) {
if(name.equalsIgnoreCase("id") && "10011".equals(value)){
flag = false;
}else{
flag = true;
}
return flag;
}
实现的效果为只过滤掉属性名称为 {"age":101,"name":"jason"}
这里id并没有被过滤掉,因为value取值不是 (3)警告: 如果某一个属性使得 四、使用属性过滤器SimplePropertyPreFilter示例如下,只有出现在SimplePropertyPreFilter构造器参数中的属性才会被输出: SimplePropertyPreFilter simplePropertyPreFilter =
new SimplePropertyPreFilter(Persion.class,"name","age");
输出json结果如下: {"age":101,"name":"jason"}
属性 五、方式对比
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |