validator validations org missing example java bean-validation hibernate-validator jsr

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