En Java, il est possible d’utiliser la validation de beans pour permettre d’en valider son contenu, donc les différents membres de la classe. Par exemple, si on a une classe Personne, qui contient un nom et un prénom, on voudrait valider que ceux-ci ne dépassent pas une certaine taille ou même qu’ils respectent une expression régulière.
Plutôt que de créer des méthodes visant à vérifier chaque élément un à un, on va se baser sur des annotations.
Prenons la classe suivante comme référence pour ce 1er exemple :
public class Person
{
@Size(min = 1, max = 5, message = "cod: btw. 1 and 5")
private String cod;
@Size(max = 60, message = "firstName: Length max 60")
private String firstName;
@NotNull(message = "birthdate: mandatory")
private LocalDate birthdate;
// ...
}
On utilise l’annotation Size pour définir la taille maximum qu’une chaine peut avoir. Si on ne spécifie pas de minimum, cela veut dire que la chaine peut être vide. A chaque fois on spécifie le paramètre « message » pour indiquer quel sera le message retourné lors de la validation.
Pour récupérer les erreurs sous forme de chaine :
Person lo_p = new Person();
Set<ConstraintViolation<T>> lo_violations =
Validation.buildDefaultValidatorFactory()
.getValidator()
.validate(lo_p);
for (ConstraintViolation<T> lo_violation : lo_violations)
{
System.out.println(lo_violation.getMessage());
}
Ce code affiche les messages en fonction des champs qui sont en erreur par rapport à l’objet qu’on donne en paramètre de la méthode validate().
Si notre classe contient une liste d’objets que l’on veut aussi valider, ou un objet d’une autre classe, il faut rajouter une annotation Valid pour qu’il soit pris en compte lors de la validation.
public class PremObj
{
@Size(min = 1, max = 20, message = "id: btw. 1 and 20")
private String id;
@Valid
@NotNull(message = "liste_sousobj: Mandatory")
private List<UnSousObj> liste_sousobj;
// ...
}
Chaque objet de la liste sera donc analysé. C’est aussi valable si on avait mis un seul objet de type « UnSousObj« . La classe que l’on référence doit évidemment posséder diverses annotations de validation.
Un champ peut également être validé sur base de valeurs d’une énumération. On peut ainsi utiliser l’annotation Enum (sur une variable de type String). Le paramètre obligatoire « enumClass » permet de spécifier la classe qui servira à la validation.
D’autres annotations utiles :
- Pattern : sur une chaine, permet de faire en sorte qu’elle respecte une expression régulière.
- Min : indique la valeur minimale d’un nombre.
- Max : indique la valeur maximale d’un nombre.
- …