我想使用JSR 303验证来验证bean的数组。就像spec所说,可以验证整个集合。 如果我有像这样的对象
public class Car {
@NotNull
@Valid
private List<Person> passengers = new ArrayList<Person>();
}
所以我可以通过以下方式验证乘客名单:
Car car = ....
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Car>> validation = validator.validate(car);
但我想知道,为什么我不能通过以下方式验证乘客名单:
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<List<Person>>> validation =validator.validate(passengers);
它只是不起作用!有人可以给我任何解释吗?
答案 0 :(得分:2)
Bean Validation不提供用于直接验证集合的API。仅支持使用@Valid
对集合/数组进行级联验证。
您正在使用的validate()
方法验证在传递的对象类型上声明的约束。在List
或ArrayList
上没有声明约束,这就是为什么在将列表直接传递给validate()
时不会发生约束违规的原因。
您可以迭代乘客列表并验证单个元素或验证拥有列表的对象(如原始示例中所示)。