java确定类和属性之间的约束JSR303 bean验证
我正在开发一个通用插件,该插件基于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
}
这是一种很好的确定方法,还是可以有其他有效或很好的方法来确定
# 1 楼答案
如果您使用的是Bean Validation 1.0,那么依赖
Node#getName()
将是一种方法(注意,在If语句中应该是leafNode.getName() != null
)Bean Validation 1.1添加了一个方法
Node#getKind()
,该方法返回不同元素类型的枚举,因此如果您已经使用1.1,这将是更好的方法