· Jose Antonio López · 5 min lectura
JSR-303 y Jakarta Bean Validation
¿Qué es la especificación JSR-303? ¿Cuál es la diferencia entre JavaBean y Spring Bean? ¿Por qué se cambió de Bean Validation a Jakarta Bean Validation?

Introducción
Cuando te pones a desarrollar una aplicación, una de las cosas más importantes que debes tener en cuenta es la validación de los datos que se introducen en la aplicación.
Validar te permite filtrar y asegurarte que los datos que llegan son los que esperas. De esta manera el código no se rompe y se garantiza una seguridad en la aplicación.
¿Por qué escribo este artículo?
Cuando usas Spring Boot lo más frecuente y útil es que uses Hibernate Validator. Muchos no nos paramos a pensar en qué es Hibernate Validator y cómo funciona. En entrevistas técnicas puede caerte alguna pregunta del tipo:
- ¿Por qué usas Hibernate en Spring Boot?
- ¿Qué es JSR-303?
- ¿Qué es un Java Bean?
- ¿Qué es un Spring Bean?
Tabla de Contenidos
JSR-303
¿Qué significa JSR-303?
Todo empezó con JSR-303. JSR significa Java Specification Request. Es una propuesta formal de especificación dentro del proceso de desarrollo de Java y está gestionado por el Java Community Process (JCP).
El número 303 es el identificador único de la JSR. Es muy parecido al proceso que se sigue en programas de gestión de historias de usuario como Jira. Para una determinada funcionalidad, se crea una historia de usuario y se le asigna un número único.
¿Qué hace la JCP?
JCP se encarga de la evolución de la tecnología Java y de la creación de nuevas especificaciones y estándares para la plataforma Java. De no haber un mecanismo o consenso para desarrollar la tecnología cada uno iría a su aire y sería muy complicado trabajar con Java.
Si quieres más información puedes visitar la página oficial de la Java Community Process.
¿Para qué sirve JSR-303?
JSR 303 es una especificación de Java Bean Validation. Define anotaciones estándar y una API para hacer validaciones en objetos Java. JSR 303 fue el primer intento de estandarizar la validación de beans en Java EE. Su desarrollo finalizón con la primera versión oficial de Bean Validation 1.0.
La información más importante para entender qué hace JSR-303 es leer en su página oficial dos datos:
- título: “Bean Validation”
- descripción: “Define un modelo de metadatos y una API para la validación de JavaBeansTM basada en anotaciones…”
Puedes encontrar todos los detalles de JSR-303 aquí.
La descripción JSR-303
La descripción parece algo compleja. A día de hoy lo que te interesa saber es que vas a usar la API que ellos pensaron en su día. Seguirás su especificación para implementar las validaciones. La sigues cómo ellos dicen y ya.
Las anotaciones son la forma más usual de añadir metadatos a tus clases. Si tienes por ejemplo un campo edad, ese es tu dato. La anotación @NotNull es el metadato que añades. El @NotNull es el metadato que añades a tu campo edad.
Diferencias entre JavaBean y Spring Bean
El primer concepto que puede llevarte a confusión es la diferencia entre Java Bean y Spring Bean. Algún día quizás busco el origen de los nombres, pero hoy no es el día.
¿Qué es un JavaBean?
Un JavaBean es un objeto Java que cumple con ciertas convenciones. Te dejo el siguiente enlace para que puedas ver más información sobre Java Beans.
Un JavaBean es una objeto que tiene:
- Campos privados
- Constructor sin argumentos
- Métodos getter y setter para acceder a sus propiedades
- Implementa la interfaz
Serializable.
¿Qué es un Spring Bean?
Un Spring Bean es un objeto que:
- Es gestionado por el contenedor de Spring
- Es de tipo BeanDefinition dentro del contenedor de Spring
- Tiene un ciclo de vida gestionado por el contenedor de Spring
- Lo marcas con la anotación @Component, @Service, @Repository, @Controller, @Bean…
Puedes encontrar información más completa en la documentación oficial de Spring.
Diferencias en una tabla
Jakarta Bean Validation
La especificación de Jakarta Bean Validation es una continuación de la especificación JSR-303 que es la más conocida y es la que encontrarás junto con JSR-349 en la documentación oficial de Spring Boot.
A fecha de hoy, la última versión de Jakarta Bean Validation es la 3.0. Puedes encontrar más información aquí.
¿Por qué se cambió de Bean Validation a Jakarta Bean Validation?
Oracle, quien era el propietario de Java EE, decidió ceder la administración y desarrollo de la plataforma a la Eclipse Foundation. Su intención era que Java EE fuera más abierta y adaptada a la comunidad.
Por temas legales y restricciones de marca, tenemos que Oracle es propietario del nombre de Java. La Eclipse Foundation se curó en salud y decidió cambiar el nombre de las especificaciones de Java EE a Jakarta.
Ahora, todas las especificaciones de Java EE están bajo el nombre de Jakarta (como Jakarta Servlet, Jakarta Bean Validation, Jakarta Persistance etc.).
El movimiento que más destaca por evitar a Oracle fue el cambio de Jakarta Bean Validation 2.0 a Jakarta Bean Validation 3.0. El único cambio fue que se movió el código del paquete javax.validation al paquete jakarta.validation.
La funcionalidad inicial se mantuvo para asegurar retrocompatibilidad con implementaciones anteriores. La evolución hacia Jakarta EE ha facilitado también un enfoque más abierto y flexible en el desarrollo de estas especificaciones.
Hibernate Validator
Hibernate Validator es una de las implementaciones de la especificación de Bean Validation. Es la implementación más conocida y usada en el mundo Java.
Uso con Spring Boot
Para hacer validaciones en Spring, se necesita de un proveedor que implemente una especificación para validar beans. ¿Adivinas qué especificación es esa?
Correcto, la especificación JSR-303. Spring Boot por defecto usa Hibernate Validator como proveedor de la especificación JSR-303.
Para ver un ejemplo práctico de cómo extender estas capacidades, consulta cómo crear validadores personalizados con Hibernate y Spring Boot.
A día de hoy, la última versión estable de Hibernate Validator es la 8.0.0 que implementa Jakarta Bean Validation 3.0. Jakarta Bean Validation 3.0 está basada en JSR-303 y por tanto puedes usar todas las anotaciones que ya conoces.
Puedes encontrar más información en la página oficial de Hibernate Validator.
- Java
- JSR-303