使用JSR 303验证集合

时间:2012-05-02 17:13:51

标签: java validation bean-validation

我想使用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);

它只是不起作用!有人可以给我任何解释吗?

1 个答案:

答案 0 :(得分:2)

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

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

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