2011-02-12 56 views
1

我有以下的Java類,我想用傑克遜將其序列化到JSON:傑克遜:場序列化格式取決於其他字段的值

public class Event 
    boolean allDay; 
    Date start; 
    Date end; 

    // get/set 
} 

但我想格式中的日期爲「YYYY-MM- dd「,當allDay爲真時爲」yyyy-MM-dd HH:mm「,當allDay爲假時爲」yyyy-MM-dd HH:mm「。那可能嗎?

回答

1

我不認爲有任何內置的方式來做到這一點,這意味着你需要編寫一些自定義的序列化代碼。 JsonDeserialize可能是你想要開始的地方。

您還必須確保使用JSON的代碼知道如何處理兩種替代格式 - 而這完全是一團糟。實際上,發送未格式化的時間戳(我認爲默認情況下將其編寫爲自時代以來的毫秒數)並確保客戶端代碼在向用戶顯示之前對其進行適當格式化可能更有意義。

+0

謝謝,邁克。該格式是由第三方API施加的,所以我無法控制它。我已經爲單個屬性編寫了自定義序列化器(使用JsonSerializer),但它不允許我添加該規則(字段的格式取決於其他字段的值)。 – 2011-02-12 17:12:40

1

邁克的回答是正確的,目前的序列化器(可能是反序列化器)是明顯的方法。我想不出更具體的支持來處理像這樣的共同約束情況。

對於反序列化,您也可以考慮使用@JsonCreator作爲構造函數(或靜態工廠方法):好處是您可以定義要傳遞的布爾標誌和字符串值,因此定製處理會更簡單。