Pregunta

¿Es posible validar una colección de objetos en JSR 303 -? Jave Bean Validation donde la colección en sí no tiene ninguna anotación, pero los elementos contenidos en las tareas

Por ejemplo, es posible que este se traduzca 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);
¿Fue útil?

Solución

Sí, sólo tiene que añadir @Valid a la colección.

Aquí es un ejemplo de el Validador de referencia Hibernate.

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

Esta es la norma comportamiento JSR-303. Véase la sección 3.1.3 de la especificación .

Otros consejos

, puede también añadir @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á al menos un pasajero está presente, y la anotación @Valid asegura que cada objeto Person se valida

Puede, por supuesto, también acaba de iterar sobre la lista y llamar Validator.validate en cada elemento. O poner la lista en algún grano de envoltorio y anotar con @Valid. La extensión de ArrayList para la validación parece mal a mí. ¿Tiene un caso de uso particular que desea resolver con esto? Si es así tal vez se puede explicar un poco más. Para responder a su pregunta inicial:

  

¿Es posible validar una   colección de objetos en JSR 303 -   Jave Bean Validation donde el   colección en sí no tiene ningún   anotaciones pero los elementos contenidos   dentro de hacer?

No

Me escribió 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 deserializar JSON se puede añadir una anotación @JsonCreator en el constructor y Jackson será automáticamente deserializar matriz JSON al objeto envoltorio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top