Spring : la validation simplifiée avec Spring. Démos pratiques.

Ce post a pour objectif de vous faire découvrir les nouveautés de Spring bean validation capable dorénavant de supporter les  JSR 303 & 349. En exemple, nous verrons comment réaliser des tests unitaires et des tests d'intégration (où le validator est injecté par spring) et nous rédigerons des tests d'intégration dans lesquels nous abuserons des nouvelles annotations de spring-boot. A titre d'exemple, nous verrons également comment employer les annotations @RunWith(SpringRunner.class) et @SpringBootTest.

Spring-Batch (Part II): Validation and Skip Policy. Ou comment gérer les données non valides dans un batch?

Après la première partie sur les tests unitaires du reader de Spring-Batch, nous passons à la validation des données input.
Ce second volet exige un minimum de connaissances sur spring & spring-batch.

Nous tentons de relever plusieurs défis majeurs correspondants aux attentes en production:

  • identifier avec précision le numéro de la ligne invalide (non traitée par le batch lancé la veille),
  • générer un rapport exploitable du déroulement du batch (exécutée la nuit),
  • porter en base les erreurs rencontrées en traçant correctement leurs causes exactes,

Nous nous posons la question de la validation des lignes lues par le Reader et aussi comment définir une politique d'éviction (skip) de ces lignes non valides.

En franglais, c'est la question validate & skip policy dans les batchs.

Ce sont deux notions bien distinctes mais fort bien liées.

JSoup : validation et sécurisation des contenus html soumis

Vous avez probablement tous déjà réalisé une application contenant des champs rich text. Ces champs rich text permettent aux utilisateurs d'exprimer pleinement leur talent en soumettant du code html (cms, wiki, blog, etc etc...). Malheureusement ils impliquent également un certain nombre de contraintes de sécurité et/ou de validation.

Certains frameworks offrent des composants plus ou moins complets qui traitent ces contraintes aussi bien coté client que coté serveur mais ils sont peu souples. D'autres produits, plus aboutis, s’arrêtent coté client (au hasard CKEditor ou TinyMCE).

J'aimerais donc vous présenter une librairie qui, couplée à ces produits, peut être très utile. Il s'agit de JSoup. Avantage non négligeable de cette API : elle est simple et légère.

Hibernate Validator et Spring: Utiliser Javascript dans Java (JSR 223)

Hibernate Validator (HV) est l'implémentation de référence de la JSR 303.

La JSR 223 permet de réutiliser les langages de scipt dans le monde java comme nous le montrons ci-après avec HV 4.2.

La version HV 4.2 apporte de nouvelles fonctions simplifiant la vie du développeur.

Ces améliorations répondent à des besoins concrets et n'exigent pas d'écrire du code.

Quelques annotations suffiront.

La démo ci-après détaille quelques notions avancées de HV 4.2.

Elle permet de valider deux propriétés inter-dépendantes, par exemple:

- Vérifier que deux propriétés (mail, motdepasse, ...) sont identiques.

- Comparer une propriété à une autre.

Ces différentes validations se feront via un language de script.

SpringMVC et la JSR303 (validation)

Suite au billet SpringMVC pour les nuls, nous poursuivons avec l'ajout de la validation à base de la JSR303.

La JSR303 ou Bean Validation offre une API standard qui permet de valider un objet Java et de générer la liste des violations des contraintes non observées.

La gestion de la validation est indépendante de la nature de l'application.

Mais ici la démonstration est produite dans le cadre d'une application web avec SpringMVC.

En effet, dans cette démo, on configure Spring, on ajoute quelques annotations sur les propriétés (les champs), une annotation sur l'objet dans le controller et c'est tout.

Plus précisément, en cinq actes nous allons mettre en place la validation dans notre application web sans écrire du code.

Il est préférable de partir du projet de la seconde partie du billet déjà mentionné.

Il faudrait donc le compléter en suivant les cinq actes ci-après.

Framework de validation de Spring 2.5+ avec annotations Java 5 [1ère partie : Durée 20min]

En quatre actes, nous allons illustrer la puissance du framework de validation de Spring sans écrire la moindre classe de validation.
En effet, quelques annotations dans vos beans (POJO), trois lignes de configuration et une ligne de code java; et le tour est joué! Le résultat obtenu est impressionnant!
Vos objets sont validés. De plus, la validation est faite côté serveur et client.
Nous détaillerons tout cela sur un exemple intéressant un peu plus loin.
Ma découverte du framework de validation de Spring me fait dire :
Avec Spring, la vie des développeurs (et des chefs de projet) devient un fleuve tranquille de bonnes pratiques même si l'apprentissage, lui, est loin de l'être!

Sans rentrer dans le débat sur la nécessité de valider les objets et du côté client et du côté serveur, ce framework concilie et satisfait les deux avis.

La démonstration qui va être donnée contient deux projets:
- Le premier, projet web Spring MVC avec maven, détaille comment valider, côté client et serveur, nos objets avec les meilleures pratiques.
- Le second, projet java standalone, illustre un certain nombre d'annotations du framework de validation avec peu de lignes de configuration xml.
Et, le tout avec très peu de code java et en recourant aux validateurs prédéfinis de ce framework.
Le résultat est déconcertant!
Ce framework nous épargne des dizaines de lignes de code java (sans parler du temps à consacrer à les tester/déboguer!).

La démo ci-après repose et applique les deux grands principes:

  • Tout est POJO,
  • Séparation des préoccupations.

Passons à la pratique.....
Un seul pré requis nécessaire : connaître le framework de Spring et Spring MVC.