我正在开发一个通用插件,它有助于根据JSR303 bean验证来验证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 :(得分:1)
如果您正在使用Bean Validation 1.0,那么依赖Node#getName()
将是最佳选择(请注意,if语句中应该leafNode.getName() != null
)。
Bean Validation 1.1添加了一个方法Node#getKind()
,它返回不同元素种类的枚举,所以如果你已经使用1.1,这将是更好的方法。