Validation des données en Java : aperçu des outils et bibliothèques
La validation (vérification de l'exactitude) des données est l'une des étapes clés du développement de toute application. Sans une vérification fiable des données d'entrée, l'application devient vulnérable aux erreurs, aux comportements incorrects et aux attaques. En Java, il existe plusieurs approches et bibliothèques éprouvées qui permettent de mettre en œuvre la validation rapidement, de manière flexible et avec un minimum de code standard.
Dans cet article, nous examinerons les principaux outils de validation des données en Java : la norme Bean Validation (Jakarta Validation), son implémentation la plus populaire Hibernate Validator, ainsi qu'une alternative — Apache Commons Validator. Nous aborderons également la validation manuelle pour les cas simples.
1. Norme Bean Validation (Jakarta Validation)
Bean Validation (anciennement JSR 380, désormais Jakarta Validation) est une spécification qui définit un ensemble d'annotations pour la validation déclarative des objets Java. L'idée principale : vous décrivez les règles de vérification directement dans les champs de la classe à l'aide d'annotations, et le moteur de validation les vérifie automatiquement.
Annotations principales
@NotNull— la valeur ne doit pas être null.@NotEmpty— la chaîne, la collection ou le tableau ne doivent pas être vides (et non null).@NotBlank— la chaîne ne doit pas être vide ou composée uniquement d'espaces.@Size(min, max)— limitation de la longueur d'une chaîne, de la taille d'une collection ou d'un tableau.@Min/@Max— limitations numériques.@Pattern(regexp = "...")— vérification par expression régulière.@Email— vérification du format de l'adresse email.
Exemple d'utilisation
import jakarta.validation.constraints.*;
public class User { @NotBlank(message = "Le nom ne peut pas être vide") @Size(min = 2, max = 50) private String name;
@Email(message = "Email invalide") @NotNull private String email;
@Min(18) @Max(120) private int age;
// getters et setters}Pour lancer la validation, on utilise l'objet Validator :
import jakarta.validation.*;import java.util.Set;
public class ValidationExample { public static void main(String[] args) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator();
User user = new User(); user.setName("A"); user.setEmail("email-invalide"); user.setAge(10);
Set<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> violation : violations) { System.out.println(violation.getMessage()); } }}2. Hibernate Validator — implémentation de la norme
Hibernate Validator est l'implémentation de référence de la spécification Bean Validation. Elle prend entièrement en charge toutes les annotations Jakarta Validation et ajoute ses propres extensions, telles que @URL, @CreditCardNumber, @ISBN et d'autres.
Fonctionnalités supplémentaires
- Validateurs personnalisés — vous pouvez créer vos propres annotations et logique de validation.
- Groupes de validation — vérifier différents ensembles de règles selon le contexte (par exemple, création vs mise à jour).
- Intégration avec Spring Boot, Java EE / Jakarta EE prête à l'emploi.
Exemple de validateur personnalisé
import jakarta.validation.Constraint;import jakarta.validation.Payload;import java.lang.annotation.*;
@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = PhoneValidator.class)public @interface ValidPhone { String message() default "Numéro de téléphone invalide"; Aussi dans la bibliothèque
Bibliothèque WebSocket Java : Tyrus — implémentation JSR 356 pour le temps réel
Event Bus et le pattern Observer en Kotlin : guide avec exemples
Lottie Swift : guide complet avec exemples
SpriteKit Swift : guide complet avec exemples