JSR 303:如何验证带注释的对象的集合?


问题内容

是否有可能在JSR 303-Jave Bean Validation中验证对象的集合,而该集合本身没有任何注释,但包含在其中的元素呢?

例如,由于第二个人的名字为空,这是否可能导致约束冲突:

List<Person> people = new ArrayList<Person>();
people.add(new Person("dave"));
people.add(new Person(null));

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<List<Person>>> validation = validator.validate(people);

问题答案:

是的,只需添加@Valid到集合中即可。

这是《
Hibernate验证程序参考》中的示例

public class Car {
  @NotNull
  @Valid
  private List<Person> passengers = new ArrayList<Person>();
}

这是标准的JSR-303行为。参见规范的 3.1.3节。