Spring ofrece una librería de utilidades de validación, a la par que permite a una aplicación definir validadores propios, o usar el paquete de anotaciones estándar de Java.

Validator

Un validador es toda clase que implemente la interface Validator:

El método supports sirve para indicar qué tipo de clases es capaz de validar, y el método validate para implementar la validación en si misma. Errors es una interface genérica que define Spring para que las aplicaciones puedan acumular errores.

Supongamos una clase para registrar los datos de un libro:

Y su correspondiente validador:

En el validador se aprecia el uso de la clase ValidationUtils, para realizar algunas tareas comunes, y de la anteriormente mencionada Errors, para almacenar los códigos de error, cuyos mensajes de texto asociados se podrán recuperar posteriormente utilizando las capacidades de internacionalización ya vistas en un artículo anterior.

Para probar el validador se puede utilizar un código como el siguiente, que presupone la existencia de un contexto y una configuración adecuada:

La clase BeanPropertyBindingResult es un recurso necesario que se introduce ahora para poder ejecutar el proceso de validación, pero que se discutirá en otro capítulo relativo al Binding. Su propósito es extraer las propiedades del objeto dado para que se les pueda asociar directamente códigos de error.

Anotaciones

Spring soporta la familia de anotaciones estándar de Java que permite especificar las validaciones a realizar directamente dentro de las clases. No obstante, para que funcionen es necesario configurar un paquete que las implemente, como el que proporciona Hibernate, en el fichero pom.xml:

Una vez añadida la dependencia se puede prescindir de la clase de validación anterior, y usar las anotaciones para describir las validaciones a realizar directamente sobre los campos de los beans:

La modificación es bastante sencilla de entender, para probarla se puede utilizar un código como el siguiente:

Por último, comentar que si lo que se quiere es inyectar un validador a un bean, evitando tener que instanciar una implementación concreta por código, se puede añadir a la configuración dentro del fichero applicationContext.xml:

Esto fuerza a que Spring busque la implementación por su cuenta, y la inyecte en los beans que lo soliciten independientemente de que usen el paquete propio de Spring o el estándar: