2012-07-09 113 views
1

是否可以使用toJson(object)來序列化一個對象,並讓toJson-parser忽略某些方法?Java玩! toJson忽略某些方法

我們在User類(getSocial - 與Facebook集成有關)中有一個方法,它使toJson() - 解析失敗 - 並且我們希望它在序列化時忽略該方法(如果可能)。

可以這樣做嗎?

回答

0

你可以只遍歷對象,並將其與僅指定值改寫爲MapList

請注意,如果您正在使用Ebean選擇你的目標是獲取整個對象,也數據,這不應該被取出(如密碼或其他憑證)

+1

謝謝,儘管我剛剛結束了使用@JsonIgnore。 – nicohvi 2012-07-09 11:35:53

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; 
    } 
}