2

我想使用 JSR 303 验证来验证 bean 数组。就像规范说的那样,可以验证整个集合。如果我有这样的对象

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);

它只是行不通!任何人都可以给我任何解释吗?

4

1 回答 1

2

Bean Validation 不提供用于直接验证集合的 API。仅支持使用的集合/数组的级联验证@Valid

validate()您使用的方法验证在传递对象的类型上声明的约束。没有在Listor上声明约束ArrayList,这就是为什么在将列表直接传递给 时不会发生约束违规的原因validate()

您可以遍历乘客列表并验证各个元素或验证拥有该列表的对象(如您的原始示例中所示)。

于 2012-05-02T18:24:39.250 回答