请考虑以下代码:
class A {
@NotNull String propertyA;
}
class B {
@Valid java.util.List<A> list;
@Valid java.util.Map<Integer, A> map;
@Valid java.util.Set<A> set;
}
B b = ...
ValidatorFactory validatorFactory = Validation
.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
validator.validate(b);
让我们假设list
的属性map
,set
和b
都包含A
的一个实例propertyA
{{1}因此违反了。 null
调用的结果会产生一组validate(b)
,其中包含三个违规行为,其中包含以下ConstraintViolation
:
PropertyPath
在Node{name=list,inIterable=false}
-> Node{name=propertyA,inIterable=true,index=0,key=null}
Node{name=map,inIterable=false}
-> Node{name=propertyA,inIterable=true,index=null,key=0}
Node{name=set,inIterable=false}
-> Node{name=propertyA,inIterable=true,index=null,key=null}
属性的路径中,第二个节点包含list
属性,用于标识index
的违规元素。同样,List
属性的路径在第二个节点中具有违反的密钥。但是,没有信息在map
属性的路径中违反了哪个元素。我希望将违规元素作为set
或第三个Node属性key
,或类似的东西。
当Node.setElement
中有多个元素时,如何识别该集合中违反的元素?