2010-06-05 80 views
10

我想將java對象轉換爲使用Jackson的Tomcat/jersey中的JSON對象。並且想要動態地抑制某些屬性的序列化(寫入)。傑克遜 - 動態抑制屬性的序列化(寫)

我可以使用JsonIgnore,但我想在運行時做出忽略決定。有任何想法嗎??

所以下面一個例子,我希望當我序列化用戶對象JSON打壓「ID」字段..

new ObjectMapper.writeValueAsString(user); 


class User { 

private String id = null; 
private String firstName = null; 
private String lastName = null; 

//getters 
//setters 

}//end class 

回答

0

我看不出這樣做的任何方式。如果您需要動態決定編組哪些屬性,那麼我建議您手動爲您的對象構造鍵的值,然後將該Map傳遞給Jackson,而不是直接傳遞User對象。

+0

謝謝。在創建JSON數組時,我認爲Map模式也有點弱。 Map map1 = new HashMap (); map1.put(「fname」,「Steve」); map1.put(「lname」,「Colly」); \t \t Map map2 = new HashMap (); map2.put(「fname」,「Josh」); map2.put(「lname」,「Roff」); List jsonArray = new ArrayList(); jsonArray.add(map1); jsonArray.add(map2); new ObjectMapper()。writeValueAsString(jsonArray) ...不產生??? {{'fname':'Steve','lname':'Colly'},{'fname':'Josh','lname':'Roff'}] – kapso 2010-06-05 18:22:47

+0

@ kapil.isr:是的,I剛剛嘗試過,它工作正常。鍵的順序是不同的,但這是因爲你使用了「HashMap」而不是「LinkedHashMap」。 – skaffman 2010-06-05 18:35:30

+0

o是的,它的工作,對不起錯字:)感謝很多! – kapso 2010-06-05 18:40:04

2

檢查

ObjectMapper.configure(SerialiationJson.Feature f, boolean value) 

org.codehaus.jackson.annotate.JsonIgnore 

註釋

當你想要某種類型的所有實例都忽略序列號這隻會工作。如果你真的想要動態的(又稱每個實例定製),你可能會自己破解傑克遜庫。

0

您是否嘗試過使用JSON Views? 視圖允許基於註解的機制來定義不同的配置文件,所以如果你只是需要對不同的用戶有不同的視圖,這可能適用於你。