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 wit
Yes, just add @Valid
to the collection.
Here is an example from the Hibernate Validator Reference.
public class Car {
@NotNull
@Valid
private List<Person> passengers = new ArrayList<Person>();
}
This is standard JSR-303 behavior. See Section 3.1.3 of the spec.
You, can also add @NotEmpty
to the collection.
public class Car {
@NotEmpty(message="At least one passenger is required")
@Valid
private List<Person> passengers = new ArrayList<Person>();
}
this will ensure at least one passenger is present, and the @Valid
annotation ensures that each Person
object is validated
You 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:
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?
No
I wrote this generic class:
public class ValidListWrapper<T> {
@Valid
private List<T> list;
public ValidListWrapper(List<T> list) {
this.list = list;
}
public List<T> getList() {
return list;
}
}
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.
As of Bean Validator 2.0, both of these approaches work:
class MyDto {
private List<@Valid MyBean> beans;
}
and
class MyDto {
@Valid
private List<MyBean> beans;
}