2013-07-10 59 views
3

我正在做Java驗證分析。按字段驗證Java對象

我需要建立一個模塊,它使用註釋和支持自定義域驅動的註釋來逐個驗證對象[graph]。最重要的方面是無效的對象不能被拒絕(例如通過基礎持久層),而是被標記爲無效。

例如,選擇一個具有多個屬性的類。如果任何一項無效(例如錯過或錯誤估價),我想知道哪一項是錯誤的,並將其標記爲無效。重要的是,我得到全部這個沒有通過驗證的字段,無論它是原始字段還是具有驗證問題的子實體。

我已經採取了看看javax.validation但我無法弄清楚的ConstraintViolation的作用:它是由驗證返回時發現驗證錯誤, AFAIK不顯示的字段名稱來收集。

問題是:你有沒有使用任何javax.validation實現的例子,它們顯示字段名稱的列表,這些列表對於每個驗證的bean都是無效的?

此外,我可以引入自定義屬性,而不是添加ValidatedBy屬性爲每個要用自定義邏輯驗證的重複屬性?

回答

4

如果希望引起ConstraintViolation元素的名稱必須使用

Path path = ConstraintViolation.getPropertyPath(); 
// a path is an iterable of Path.Node objects 
// the last node element in the path is the element that caused the violation 
// You can get it's name via 
Path.Node node = ...; 
node.getName(); 

看看關於路徑的詳細信息,JSR-303 spec第4.2章。