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

答案 1

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

下面是休眠验证器参考中的一个示例

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

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


答案 2

您也可以添加到集合中。@NotEmpty

public class Car {
  @NotEmpty(message="At least one passenger is required")
  @Valid
  private List<Person> passengers = new ArrayList<Person>();
}

这将确保至少有一名乘客在场,并且注释确保每个对象都经过验证@ValidPerson


推荐