2013-10-10 43 views
0

我正在使用一個通用插件來幫助驗證基於JSR303 bean驗證的bean。 因爲它需要是通用的,所以我不能依靠底層的供應商實現。在類和屬性約束之間進行確定JSR303 bean驗證

我需要從ConstraintViolation對象中確定違反約束的類型。一種方法是使用ConstraintViolation#getPropertyPath()。如果getName()leaf節點上返回null,那麼您有一個類級約束,否則屬性級約束。

一種選擇是像

Iterator<Node> violationNodes=violation.getPropertyPath().iterator(); 
    Node leafNode=null; 
    while (violationNodes.hasNext()){ 
     leafNode=violationNodes.next(); 
    } 

    if(leafNode!=null){ 
    // property constraint 
    } 
    else{ 
    // class constraint 
    } 

這是很好的方法來確定或可以有其他有效的還是不錯的方法來做到這一點?

回答

0

如果你正在使用Bean Validation 1.0,那麼依靠Node#getName()就可以了(注意if語句應該是leafNode.getName() != null)。

Bean Validation 1.1添加了一個方法Node#getKind(),該方法返回不同元素種類的枚舉,所以如果您已經使用了1.1,這將是更好的方法。

+0

不確定到現在爲止,因爲哪個版本的'Bean Validation'使用依賴對象,但我不確定是否所有供應商都使用了1.1。如果我記得沒有問題,Apache Bean驗證器仍然無法使用1.1 –

相關問題