java - 使用 JSR 303 验证集合

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

这根本行不通!有人能给我任何解释吗?

最佳答案

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

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

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

关于java - 使用 JSR 303 验证集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418529/

相关文章:

java控制台窗口没有出现

java - JFrame 删除 JPanel 并添加新的 JPanel

java - 在 Jaxb 2.1 中使用 @XmlTransient 注释 java 方法时出现的问题

java - Hibernate:通过单个连接表引用多个表

javascript - 如果输入一个输入字段,则更改所有输入字段的类别

validation - knockout 验证 : HTML5 min/max parsed as string

java - @Digits 约束(Bean Validation-JSR 303)如何支持 String 类型?

css 验证错误 moz 绑定(bind)?

java - 使用 JSR-303 的派生类中更具体的约束

java - 如何在 spring 4.* 中通过注解创建多个字段的约束 validator