Java Play! toJson忽略了某些方法

时间:2012-07-09 11:14:33

标签: json playframework-2.0

是否可以使用toJson(object)序列化对象并让toJson-parser忽略某些方法?

我们在User类中有一个方法(getSocial - 与Facebook集成有关),这使得toJson() - 解析失败 - 我们希望在序列化时忽略该方法。

可以这样做吗?

2 个答案:

答案 0 :(得分:0)

您只需迭代对象并仅使用指定值将其重写为MapList

请注意,如果您使用Ebean选择对象,则会获取整个对象,也包括不应提取的数据(作为密码或其他凭据)

答案 1 :(得分:0)

使用fastjson & PropertyFilter

示例代码

import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.PropertyFilter;
import com.alibaba.fastjson.serializer.SerializeWriter;

PropertyFilter filter = new PropertyFilter() {
    public boolean apply(Object source, String name, Object value) {
        return false;
    }
};

SerializeWriter out = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(out);
serializer.getPropertyFilters().add(filter);

A a = new A();
serializer.write(a);

String text = out.toString();
Assert.assertEquals("{}", text);

PropertyFilter

PropertyFilter filter = new PropertyFilter() {
    public boolean apply(Object source, String name, Object value) {
        if("name".equals(name)) {
            return true;
        }
        return false;
    }
};

SerializeWriter out = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(out);
serializer.getPropertyFilters().add(filter);

A a = new A();
a.setName("chennp2008");
serializer.write(a);

String text = out.toString();
Assert.assertEquals("{\"name\":\"chennp2008\"}", text);

的ValueObject:

public static class A {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}