0Pricing
Java Academy · Leçon

Validation des beans : @NotNull, @Size, @Pattern

Annotez les DTO avec les contraintes de Bean Validation et déclenchez la validation avec @Valid dans les contrôleurs.

Validation des beans : @NotNull, @Size, @Pattern est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Qu’est-ce que la validation des beans ?

La validation des beans (Jakarta Bean Validation 3.0) fournit des annotations de contraintes déclaratives pour les beans Java. Spring Boot configure automatiquement un validateur et le déclenche via @Valid ou @Validated.

@NotNull, @NotEmpty, @NotBlank

@NotNull : la valeur ne doit pas être nulle. @NotEmpty : la valeur ne doit être ni nulle ni vide (chaînes/collections). @NotBlank : la valeur ne doit être ni nulle, ni vide, ni composée uniquement d’espaces. Préférez @NotBlank pour les chaînes.

public record CreateUserRequest(
    @NotBlank(message = "Name is required")
    String name,
    @NotBlank @Email
    String email,
    @NotNull
    UserRole role
) {}

@Size et @Length

@Size(min, max) contraint la taille des chaînes, collections, maps et tableaux. @Length (Hibernate) ne fonctionne que sur les chaînes. Préférez @Size pour assurer la portabilité.

@Size(min = 3, max = 50, message = "Name must be 3-50 characters")
private String name;
@Size(min = 1, max = 10, message = "Cart must have 1-10 items")
private List<CartItem> items;

@Min, @Max, @Positive, @Range

Contraintes numériques : @Min/@Max pour des bornes précises, @Positive/@PositiveOrZero pour les contraintes de signe, et @DecimalMin/@DecimalMax pour BigDecimal.

@Min(1) @Max(100)
private int quantity;
@DecimalMin("0.01") @DecimalMax("99999.99")
private BigDecimal price;
@Positive
private long orderId;

@Pattern pour la validation par expression régulière

@Pattern(regexp) vérifie les chaînes par rapport à une expression régulière. Cette annotation est utile pour les numéros de téléphone, les codes postaux et les formats personnalisés.

@Pattern(regexp = "^\\+?[1-9]\\d{7,14}$", message = "Invalid phone number")
private String phone;
@Pattern(regexp = "^[A-Z]{2}\\d{5}$", message = "Invalid postal code (e.g. AB12345)")
private String postalCode;

@Email et @URL

@Email valide le format d’une adresse e-mail (RFC 5321 de base). @URL (Hibernate) valide le format d’une URL. Combinez-les toujours avec @NotBlank, car elles autorisent la valeur nulle.

@NotBlank @Email
private String email;
// Hibernate-specific:
@URL(protocol = "https")
private String profileUrl;

@Past, @Future, @PastOrPresent

Les contraintes temporelles valident les valeurs de date et d’heure. Elles fonctionnent avec LocalDate, LocalDateTime, Instant, et bien d’autres types.

@Past(message = "Birth date must be in the past")
private LocalDate birthDate;
@Future(message = "Expiry must be in the future")
private LocalDate expiryDate;

Déclencher la validation avec @Valid

Ajoutez @Valid à un paramètre de méthode d’un contrôleur. Spring valide l’objet et lève MethodArgumentNotValidException en cas d’échec, en renvoyant une erreur 400 Bad Request.

@PostMapping("/users")
public ResponseEntity<UserDto> create(@Valid @RequestBody CreateUserRequest req) {
    User user = userService.create(req);
    return ResponseEntity.status(201).body(UserDto.from(user));
}

Validation en cascade avec @Valid sur les champs

Pour valider des objets imbriqués, annotez le champ avec @Valid en plus des contraintes au niveau de la classe.

public record OrderRequest(
    @NotNull @Valid
    AddressRequest shippingAddress, // validates AddressRequest constraints too
    @Valid @NotEmpty
    List<@Valid LineItemRequest> items
) {}

Groupes de validation

Utilisez des groupes pour appliquer des contraintes différentes selon le contexte (par exemple, création ou mise à jour). Annotez avec l’interface du groupe et déclenchez la validation avec @Validated(CreateGroup.class).

public interface CreateGroup {}
public interface UpdateGroup {}
public record UserRequest(
    @NotBlank(groups = CreateGroup.class) String password,
    @NotNull(groups = UpdateGroup.class)  Long id
) {}
// Controller:
@PutMapping("/{id}")
public UserDto update(@Validated(UpdateGroup.class) @RequestBody UserRequest req) { ... }

Lire les erreurs de validation

Interceptez MethodArgumentNotValidException dans un @ControllerAdvice pour extraire les erreurs de champ et construire des réponses d’erreur structurées.

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidation(MethodArgumentNotValidException ex) {
    Map<String, String> errors = new LinkedHashMap<>();
    ex.getBindingResult().getFieldErrors().forEach(e ->
        errors.put(e.getField(), e.getDefaultMessage()));
    return ResponseEntity.badRequest().body(errors);
}

Vérification rapide

Quelle annotation vérifie qu’une chaîne String n’est pas nulle ET n’est pas vide ou composée uniquement d’espaces ?

Récapitulatif

Annotez les DTO avec les contraintes de validation des beans. Ajoutez @Valid dans les contrôleurs pour déclencher la validation. Utilisez @NotBlank pour les chaînes, @Size pour les longueurs, @Pattern pour les expressions régulières, et @Past/@Future pour les dates. Gérez les erreurs dans @ControllerAdvice.

Questions Fréquemment Posées

La leçon « Validation des beans : @NotNull, @Size, @Pattern » est-elle gratuite ?

Oui — le texte complet de « Validation des beans : @NotNull, @Size, @Pattern » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Validation des beans : @NotNull, @Size, @Pattern » ?

Annotez les DTO avec les contraintes de Bean Validation et déclenchez la validation avec @Valid dans les contrôleurs. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Validation des beans : @NotNull, @Size, @Pattern » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Validation des beans : @NotNull, @Size, @Pattern
  2. Annotations de contrainte personnalisées
  3. Gestion globale des exceptions avec @ControllerAdvice
  4. Détails de problème RFC 7807 et réponses d’erreur cohérentes
← Retour à Java Academy