逐字段验证Java对象

时间:2013-07-10 11:00:25

标签: java validation bean-validation

我正在进行Java验证分析。

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

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

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

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

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

1 个答案:

答案 0 :(得分: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 spec第4.2章。