1

我正在开发一个通用插件,它有助于基于 JSR303 bean 验证来验证 bean。由于它需要是通用的,所以我不能依赖底层的供应商实现。

我需要从ConstraintViolation对象中确定违反约束的类型。一种方法是使用ConstraintViolation#getPropertyPath(). 如果getName()在节点上返回 null,则leaf您具有类级别约束,否则为属性级别约束。

一种选择是

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

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

这是确定的好方法还是可以有其他有效或好的方法来做到这一点?

4

1 回答 1

1

如果您正在使用 Bean Validation 1.0,那么依赖Node#getName()将是一种方法(请注意,它应该leafNode.getName() != null在您的 if 语句中)。

Bean Validation 1.1 添加了一个方法,该方法Node#getKind()返回不同元素类型的枚举,因此如果您已经使用 1.1,这将是更好的方法。

于 2013-10-10T11:06:16.570 回答