2016-07-12 38 views
0

我使用jackosn序列化一個POJO,並且我希望用戶設置某個值的所有值不論是否爲null都必須包含在序列化中。Jackson包含由用戶設置的空值?

所以目前:

POJO:

public class YourItem { 
    public String key; 
    public String item; 
} 

目前當用戶執行:

YourItem item = new YourItem(); 
item.setKey("abc"); 

連載給出:

{ 

     "key" : "abc" 
} 

爲我配置ObjectMapper作爲objectMapper.setInclude(Include.NON_NULL)

但是,現在如果用戶專門調用setter並將值設置爲null,那麼我希望在我的序列化字符串中的那個項目。 因此,如果用戶確實

YourItem item = new YourItem(); 
    item.setKey("abc"); 
    item.setItem(null); 

我想在serialzation key和項目值都存在這樣的:

{ 

    "key" : "abc", 
    "item" : null 

} 

我如何用戶設置爲null和默認空區分。 在ObjectMapper中是否有配置?

+0

確實有重複的地方,但嘗試'NON_DEFAULT'。 –

+0

@SotiriosDelimanolis:我已經嘗試過'NON_DEFAULT',但它沒有區別。用戶設置的空值被省略 –

+0

這不是你想要的嗎? –

回答

1

有些人認爲使用空是不好的做法(這本書清潔守則,例如)

忽視的是,你不能缺省初始化空和用戶設置的語言設計的空

區分

你需要某種狀態來跟蹤一個字段是否被setter訪問過。如果它沒有被setter訪問並且爲null,則忽略它。要做到這一點

一種方法是傑克遜的過濾器,它允許你定義各種條件運行時序列化的字段(你的條件是你的setter方法的訪問狀態,表示該字段是由用戶設定)

http://www.baeldung.com/jackson-serialize-field-custom-criteria