Is it possible to validate a collection of objects in JSR 303 - Jave Bean Validation where the collection itself does not have any annotations but the elements contained within do?
For example, is it possible for this to result in a constraint violation due to a null name on the second person:
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);
Both of these approaches work:
or
You, can also add
@NotEmpty
to the collection.this will ensure at least one passenger is present, and the
@Valid
annotation ensures that eachPerson
object is validatedYou can of course also just iterate over the list and call Validator.validate on each element. Or put the List into some wrapper bean and annotate it with @Valid. Extending ArrayList for validation seems wrong to me. Do you have a particular use case you want to solve with this? If so maybe you can explain it a little more. To answer your initial question:
No
Yes, just add
@Valid
to the collection.Here is an example from the Hibernate Validator Reference.
This is standard JSR-303 behavior. See Section 3.1.3 of the spec.
I wrote this generic class:
If you are using Jackson library to deserialize JSON you can add
@JsonCreator
annotation on the constructor and Jackson will automatically deserialize JSON array to wrapper object.