Validation automatique des données avec HTML5 et Spring3

 Article modifié dernièrement le 18 Avr 2012 @ 20 h 35 min

J’ai appris il y a longtemps qu’il était toujours nécessaire de contrôler et valider les données saisies par vos utilisateurs, du côté client comme du côté serveur (en HTML/JavaScript et en Java pour ma part), car généralement les erreurs ou les attaques viennent de là. Je n’ai jamais apprécié personnellement cette partie du travail car c’est à chaque fois la même chose et à chaque fois on doit tout refaire à la main …

Validation côté client (HTML5)

Avec HTML5 la validation de surface se fait déjà plus aisément, les nombreux « type » paramétrable dans nos champs de saisie limitent considérablement la saisie au mauvais format, exemple : <input type=email>, <input type=date>, <input type=number>, <input type=color> … (liste complète ici avec support des différents navigateurs).

Ensuite de nouveaux attributs ont vu le jour comme required, min, max, list … qui nous évitent de devoir contrôler que le champ est bien saisi, qu’il est compris dans un intervalle donné ou bien qu’il fait partie d’une liste prédéfinie de valeurs.

Dans mon nouveau projet j’utilise HTML5 comme validateur client de surface plutôt que JavaScript.

Les données envoyées au serveur sont au format JSON, la transformation de mon formulaire en objet JSON est faite avec form2js et l’envoi se fait avec jQuery de la façon suivante :

A retenir : il faut utiliser la méthode « submit » de jQuery sur le formulaire plutôt que la méthode « on » ou « bind » sur le bouton submit car sinon la validation des données en HTML5 ne se fera pas.

Validation côté serveur (Spring3)

C’est là que Spring3 entre en jeu ainsi que ses nombreuses annotations qui nous facilitent la tâche, dans notre cas je parle de @ModelAttribute et @Validated.

La première (@ModelAttribute) permet de transformer automatiquement l’objet json envoyé par notre requête Ajax en objet Java : chaque attribut de l’objet json ayant le même nom (case sensitive) qu’un attribut de l’objet Java sera récupéré automatiquement.

La seconde (@Validated) indique que l’objet annoté doit être validé, la validation est écrite uniquement via des annotations, il en va de même pour les messages d’erreur à retourner. J’utilise les annotations de Hibernate Validator qui offrent un plus grand choix, allant de @Email à @NotBlank en passant par @Future pour valider que la date saisie est dans le futur.

Malheureusement il n’existe encore aucun moyen nativement de comparer deux attributs de l’objet à valider, par exemple « email » et « emailConfirm » ou encore « password » et « passwordConfirm », la communauté s’en est chargé en créant une annotation maison « FieldMatch » que j’utilise et qui marche à merveille, voici le lien vers cette annotation.

Vous l’avez compris, avec Spring3 la validation côté serveur est rendue très simple, voici un copier coller d’un objet que je valide automatiquement avec cette méthode :

Trois flèches vers le bas

1- Logiciel de brouillage d’adresse IP :

Contourner la censure en surfant anonyme

2- L’article explicatif :

La différence entre un proxy et un VPN

3- Comment espionner un smartphone (app) :

L’application de référence

Commentez ici

  • Greg 19 avril 2012, 2 02

    Merci, Mimie, de nous délivrer ces trucs et astuces qui se révèlent toujours utiles à ceux qui s’intéressent à la programmation.

Article suivant:

Article précédent:

Share This