【问题标题】:Validate Collection using JSR 303使用 JSR 303 验证集合
【发布时间】:2012-05-02 17:13:50
【问题描述】:

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

它只是不起作用!谁能给我解释一下吗?

【问题讨论】:

    标签: java validation bean-validation


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 2018-08-24
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 2018-08-15
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多