2014-03-24 132 views
1

我有一個Json模型,需要兩個中至少有一個字段需要設置。換句話說,它不應該允許所有的null字段,並且同時不應該要求指定兩個字段。Json有多個字段中的一個必填字段

有沒有辦法與傑克遜做到這一點?

回答

1

關鍵的決定是您描述的約束是系統/技術還是應用程序的業務邏輯指定的約束。 Jackson僅僅是一個序列化/反序列化庫。驗證序列化數據的正確性通常超出其範圍。

你可以,當然,使用自定義解串器,將驗證輸入的正確性和無效的輸入扔JsonParseException。但是,這種方法可能會使解析器處於不穩定狀態。因此,它應該用於捕獲與序列化本身相關的問題,例如嘗試反序列化對象的不兼容版本,其中丟棄整個輸入通常是有效的解決方案。

對於大多數情況下,我會建議留下任何深入驗證用戶輸入到您的實際應用程序代碼。保持序列化器和解串器的實現儘可能簡單 - 即使應用程序邏輯發生變化,也可以保持不變。

試圖將實際的業務邏輯到JSON解析器只會體系結構複雜化。它會將系統錯誤的處理(例如不兼容對象的序列化)與應用程序錯誤(例如惡意客戶端同時填寫與不同用戶組相關的字段)混合處理。

+0

是的,這就是我最終做的。謝謝。 – Ryan