簡體   English   中英

Jackson定制過濾器,具有完整的POJO數據綁定

[英]Jackson custom filter with full POJO data bind

這個問題擴展了這個問題

如果您只有幾個字段,之前的解決方案效果很好,那么當您擁有十幾個字段時,它就變得無法維護。 現在,我當前的設置使用完整的數據綁定,所以我有一個POJO,Jackson將使用它來自動反序列化JSON。

但是,和以前一樣,某些字段具有需要通過的約束。 基本上,我正在尋找類似於的答案,但無需設置任何屬性。 只是一個自定義反序列化器,它將充當過濾器,並在字段不符合約束時拋出自定義異常。 如果過濾器結束時沒有拋出任何異常,Jackson應自動將JSON綁定到POJO。

似乎Json Schema可能符合您的需求。 它允許json字符串的靈活(和復雜)驗證規則在反序列化之前。 它包括必填字段,基於正則表達式的值檢查,行業標准格式(例如,您可以將字段定義為“電子郵件”格式),跨字段依賴項(在最新的v4中)等

以上是與語言無關的標准。 至於Java實現,我使用了這個支持最新的json模式版本(該標准仍在不斷發展)。 驗證器的初始集成是很多工作,(因為我非常動態的json模型)但是之后引入新的驗證規則非常方便(只需要更改json模式文件)

我建議相應地使用Jackson和Hibernate Vaildator來分離反序列化和驗證的問題。 我們的想法是首先將json數據反序列化為POJO,然后根據需求驗證POJO。 在這種情況下,您可以應用類級別約束進行驗證。 類級別約束具有很大的靈活性,可以通過訪問對象實例來驗證多個相關屬性。 它簡單而有力。

通常驗證需要更高層次的關注。 在反序列化之后處理這個問題會更好。 這樣做可以使代碼更容易管理和重用POJO和驗證規則。

只是考慮一下:如果你不關心反序列化過程中的驗證,請為你的POJO類嘗試@JsonIgnoreProperties(ignoreUnknown = true)注釋。 您可以稍后在實際業務邏輯與pojo類一起使用時進行驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM