我想使用 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);
这根本行不通!有人能给我任何解释吗?
最佳答案
Bean Validation 不提供用于直接验证集合的 API。仅支持使用 @Valid
对集合/数组进行级联验证。
您使用的 validate()
方法会验证对所传递对象的类型声明的约束。 List
或 ArrayList
上没有声明任何约束,这就是为什么将列表直接传递给 validate()
时不会发生约束违规的原因。
您可以迭代乘客列表并验证各个元素,或者验证拥有该列表的对象(如原始示例中所示)。
关于java - 使用 JSR 303 验证集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418529/