Saltar al contenido

Las anotaciones de javax.validation.constraints no funcionan

Solución:

Para que la validación del bean JSR-303 funcione en Spring, necesita varias cosas:

  1. Configuración del espacio de nombres MVC para anotaciones: <mvc:annotation-driven />
  2. El tarro de especificaciones JSR-303: validation-api-1.0.0.GA.jar (parece que ya lo tienes)
  3. Una implementación de la especificación, como Hibernate Validation, que parece ser el ejemplo más utilizado: hibernate-validator-4.1.0.Final.jar
  4. En el bean a validar, anotaciones de validación, ya sea del JAR de especificación o del JAR de implementación (que ya ha hecho)
  5. En el controlador que desea validar, anote el objeto con el que desea validar @Validy luego incluir un BindingResult en la firma del método para capturar errores.

Ejemplo:

@RequestMapping("handler.do")
public String myHandler(@Valid @ModelAttribute("form") SomeFormBean myForm, BindingResult result, Model model) {
    if(result.hasErrors()) {
      ...your error handling...
    } else {
      ...your non-error handling....
    }
}

Debe usar Validator para verificar si su clase es válida.

Person person = ....;
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
Set<ConstraintViolation<Person>> violations = validator.validate(person);

Luego, iterando el conjunto de infracciones, puede encontrar infracciones.

usted tendría que llamar a un Validador en la Entidad si desea validarla. Luego obtendrá un conjunto de ConstraintViolationException, que básicamente muestre para qué campo (s) de su entidad hay una violación de restricción y qué fue exactamente. Quizás también puedas compartir parte del código que esperas para validar tu entidad.

Una técnica de uso frecuente es realizar la validación en @PrePersist y deshacer la transacción si se utilizan varias modificaciones de datos durante la transacción o realizar otras acciones cuando se obtiene una excepción de validación.

Tu código debería ser así:

@PrePersist
public void prePersist(SomeEntity someEntity){
    Validator validator = Validation.buildDefaultValidatorFactory.getValidator();
    Set<ConstraintViolation<SomeEntity>> = validator.validate(someEntity);
    //do stuff with them, like notify client what was the wrong field, log them, or, if empty, be happy
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *