2012-10-04 63 views
0

我正在研究一個插件,我需要將Bean Validator與底層框架集成,並且它似乎能夠正常工作,除了在被攻擊的地方。JSR303 Bean驗證,如何知道類型約束被違反

插件會照顧提供任何豆驗證橋誰堅持JSR303規範(休眠-驗證,阿帕奇豆驗證)

一旦有一些約束違規錯誤,我需要知道什麼樣的違反是就像是它

  1. 提起級約束
  2. 屬性級別
  3. 職業等級

基於此我需要構建錯誤消息並需要做其他一些工作。

有沒有什麼辦法從ConstraintViolation<?>找出約束違規的類型,這樣我就可以做後處理來準備顯示在UI上的東西了?

回答

1

有沒有辦法從 ConstraintViolation找出約束違規的類型,這樣我可以做後期處理準備 事情上顯示的用戶界面?

沒有沒有。您可以區分類級約束和屬性約束。但是,無法確定註釋是放置在屬性的字段還是屬性的getter上。

確定類和屬性約束的一種方法是查看ConstraintViolation#getPropertyPath()。如果getName()在葉節點上返回null,那麼您有一個類級約束,否則爲屬性級約束。

在Bean驗證1.1(JSR 349),事情變得更容易一些,因爲路徑通過ConstraintViolation#getPropertyPath(返回)包含每個節點的#getElementDescriptor。仍然沒有辦法區分屬性如何被訪問(字段與getter)。