3

我正在对 Java 验证进行分析。

我需要构建一个模块,使用注释并支持自定义域驱动的注释,逐个字段地验证对象 [graph]。最重要的方面是不能拒绝无效对象(例如被底层持久层),而是将其标记为无效。

例如,选择一个具有许多属性的类。如果有任何无效(例如缺失或价值不高),我想知道哪个是无效的,并在另一个地方将其标记为无效。获取所有未通过验证的字段的名称很重要,无论是原始字段还是存在验证问题的子实体。

我看过javax.validation但我无法弄清楚 的作用ConstraintViolation:当发现验证错误时,它由验证器返回,AFAIK 没有显示要收集的字段名称。

问题是:您是否有任何使用 javax.validation 实现的示例,该示例显示发现对于每个经过验证的 bean 无效的字段名称列表?

另外,我可以引入自定义属性,而不是ValidatedBy为每个要使用自定义逻辑验证的重复属性添加一个属性吗?

4

1 回答 1

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 规范第 4.2 章。

于 2013-07-10T11:20:48.163 回答