· Jose Antonio López · 5 min lectura
JSR-303 i Jakarta Bean Validation
Què és l'especificació JSR-303? Quina diferència hi ha entre JavaBean i Spring Bean? Per què es va canviar de Bean Validation a Jakarta Bean Validation?

Introducció
Quan et poses a desenvolupar una aplicació, una de les coses més importants que has de tenir en compte és la validació de les dades que s’introdueixen a l’aplicació.
Validar et permet filtrar i assegurar-te que les dades que arriben són les que esperes. D’aquesta manera el codi no es trenca i es garanteix una seguretat en l’aplicació.
Per què escric aquest article?
Quan fas servir Spring Boot el més freqüent i útil és que facis servir Hibernate Validator. Molts no ens parem a pensar en què és Hibernate Validator i com funciona. En entrevistes tècniques pot caure alguna pregunta del tipus:
- Per què fas servir Hibernate en Spring Boot?
- Què és JSR-303?
- Què és un Java Bean?
- Què és un Spring Bean?
Taula de Continguts
JSR-303
Què significa JSR-303?
Tot va començar amb JSR-303. JSR significa Java Specification Request. És una proposta formal d’especificació dins del procés de desenvolupament de Java i està gestionat pel Java Community Process (JCP).
El número 303 és l’identificador únic de la JSR. És molt semblant al procés que se segueix en programes de gestió d’històries d’usuari com Jira. Per a una determinada funcionalitat, es crea una història d’usuari i se li assigna un número únic.
Què fa la JCP?
JCP s’encarrega de l’evolució de la tecnologia Java i de la creació de noves especificacions i estàndards per a la plataforma Java. De no haver-hi un mecanisme o consens per desenvolupar la tecnologia cadascú aniria a la seva i seria molt complicat treballar amb Java.
Si vols més informació pots visitar la pàgina oficial de la Java Community Process.
Per a què serveix JSR-303?
JSR 303 és una especificació de Java Bean Validation. Defineix anotacions estàndard i una API per fer validacions en objectes Java. JSR 303 va ser el primer intent d’estandarditzar la validació de beans en Java EE. El seu desenvolupament va finalitzar amb la primera versió oficial de Bean Validation 1.0.
La informació més important per entendre què fa JSR-303 és llegir a la seva pàgina oficial dues dades:
- títol: “Bean Validation”
- descripció: “Defineix un model de metadades i una API per a la validació de JavaBeansTM basada en anotacions…”
Pots trobar tots els detalls de JSR-303 aquí.
La descripció JSR-303
La descripció sembla una mica complexa. Avui dia el que t’interessa saber és que faràs servir l’API que ells van pensar en el seu dia. Seguiràs la seva especificació per implementar les validacions. La segueixes com ells diuen i ja està.
Les anotacions són la forma més usual d’afegir metadades a les teves classes. Si tens per exemple un camp edat, aquest és el teu dada. L’anotació @NotNull és el metadada que afegeixes. El @NotNull és el metadada que afegeixes al teu camp edat.
Diferències entre JavaBean i Spring Bean
El primer concepte que pot portar-te a confusió és la diferència entre Java Bean i Spring Bean. Algun dia potser busco l’origen dels noms, però avui no és el dia.
Què és un JavaBean?
Un JavaBean és un objecte Java que compleix amb certes convencions. Et deixo el següent enllaç perquè puguis veure més informació sobre Java Beans.
Un JavaBean és un objecte que té:
- Camps privats
- Constructor sense arguments
- Mètodes getter i setter per accedir a les seves propietats
- Implementa la interfície
Serializable.
Què és un Spring Bean?
Un Spring Bean és un objecte que:
- És gestionat pel contenidor de Spring
- És de tipus BeanDefinition dins del contenidor de Spring
- Té un cicle de vida gestionat pel contenidor de Spring
- El marques amb l’anotació @Component, @Service, @Repository, @Controller, @Bean…
Pots trobar informació més completa a la documentació oficial de Spring.
Diferències en una taula
Jakarta Bean Validation
L’especificació de Jakarta Bean Validation és una continuació de l’especificació JSR-303 que és la més coneguda i és la que trobaràs juntament amb JSR-349 a la documentació oficial de Spring Boot.
A data d’avui, l’última versió de Jakarta Bean Validation és la 3.0. Pots trobar més informació aquí.
Per què es va canviar de Bean Validation a Jakarta Bean Validation?
Oracle, qui era el propietari de Java EE, va decidir cedir l’administració i desenvolupament de la plataforma a la Eclipse Foundation. La seva intenció era que Java EE fos més oberta i adaptada a la comunitat.
Per temes legals i restriccions de marca, tenim que Oracle és propietari del nom de Java. La Eclipse Foundation es va curar en salut i va decidir canviar el nom de les especificacions de Java EE a Jakarta.
Ara, totes les especificacions de Java EE estan sota el nom de Jakarta (com Jakarta Servlet, Jakarta Bean Validation, Jakarta Persistence, etc.).
El moviment que més destaca per evitar a Oracle va ser el canvi de Jakarta Bean Validation 2.0 a Jakarta Bean Validation 3.0. L’únic canvi va ser que es va moure el codi del paquet javax.validation al paquet jakarta.validation.
La funcionalitat inicial es va mantenir per assegurar retrocompatibilitat amb implementacions anteriors. L’evolució cap a Jakarta EE ha facilitat també un enfocament més obert i flexible en el desenvolupament d’aquestes especificacions.
Hibernate Validator
Hibernate Validator és una de les implementacions de l’especificació de Bean Validation. És la implementació més coneguda i usada al món Java.
Ús amb Spring Boot
Per fer validacions a Spring, es necessita un proveïdor que implementi una especificació per validar beans. Endevines quina especificació és aquesta?
Correcte, l’especificació JSR-303. Spring Boot per defecte usa Hibernate Validator com a proveïdor de l’especificació JSR-303.
Per veure un exemple pràctic de com estendre aquestes capacitats, consulta com crear validadors personalitzats amb Hibernate i Spring Boot.
A dia d’avui, l’última versió estable d’Hibernate Validator és la 8.0.0 que implementa Jakarta Bean Validation 3.0. Jakarta Bean Validation 3.0 està basada en JSR-303 i, per tant, pots utilitzar totes les anotacions que ja coneixes.
Pots trobar més informació a la pàgina oficial de Hibernate Validator.
- Java
- JSR-303