java - validations - missing artifact org hibernate validator
JSR 303: ¿cómo validar una colección de objetos anotados? (4)
¿Es posible validar una colección de objetos en JSR 303 - Validación Jave Bean donde la colección en sí misma no tiene anotaciones pero los elementos contenidos en do?
Por ejemplo, es posible que esto resulte en una violación de restricción debido a un nombre nulo en la segunda persona:
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);
Escribí esta clase genérica:
public class ValidListWrapper<T> {
@Valid
private List<T> list;
public ValidListWrapper(List<T> list) {
this.list = list;
}
public List<T> getList() {
return list;
}
}
Si está utilizando la biblioteca Jackson para deserializar JSON, puede agregar la anotación @JsonCreator
en el constructor y Jackson deserializará automáticamente la matriz JSON al objeto contenedor.
Por supuesto, también puede simplemente iterar sobre la lista y llamar a Validator.validate en cada elemento. O ponga la Lista en un bean envoltorio y anótelo con @Valid. La extensión de ArrayList para la validación me parece incorrecta. ¿Tiene un caso de uso particular que quiera resolver con esto? Si es así, quizás puedas explicarlo un poco más. Para responder a tu pregunta inicial:
¿Es posible validar una colección de objetos en JSR 303 - Validación Jave Bean donde la colección en sí misma no tiene anotaciones pero los elementos contenidos en do?
No
Sí, solo agrega @Valid
a la colección.
Aquí hay un ejemplo de la Referencia del Validador de Hibernate.
public class Car {
@NotNull
@Valid
private List<Person> passengers = new ArrayList<Person>();
}
Este es el comportamiento estándar de JSR-303. Ver la Sección 3.1.3 de la spec .
Usted, también puede agregar @NotEmpty
a la colección.
public class Car {
@NotEmpty(message="At least one passenger is required")
@Valid
private List<Person> passengers = new ArrayList<Person>();
}
esto asegurará que haya al menos un pasajero presente, y la anotación @Valid
asegura que cada objeto Person
esté validado