0Pricing
Java Academy · Lektion

Bean Validation: @NotNull, @Size, @Pattern

Annotieren Sie DTOs mit Bean-Validation-Constraints und lösen Sie die Validierung mit @Valid in Controllern aus.

Bean Validation: @NotNull, @Size, @Pattern ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist Bean Validation?

Bean Validation (Jakarta Bean Validation 3.0) stellt deklarative Constraint-Annotationen für Java-Beans bereit. Spring Boot konfiguriert automatisch einen Validator und löst die Validierung über @Valid oder @Validated aus.

@NotNull, @NotEmpty, @NotBlank

@NotNull: Der Wert darf nicht null sein. @NotEmpty: nicht null und nicht leer (für Strings und Collections). @NotBlank: nicht null, nicht leer und darf nicht ausschließlich aus Leerzeichen bestehen. Bevorzugen Sie @NotBlank für Strings.

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

@Size und @Length

@Size(min, max) beschränkt die Größe von Strings, Collections, Maps und Arrays. @Length (Hibernate) funktioniert nur bei Strings. Bevorzugen Sie aus Gründen der Portabilität @Size.

@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

Numerische Constraints: @Min/@Max für exakte Grenzwerte, @Positive/@PositiveOrZero für Vorzeichenbedingungen und @DecimalMin/@DecimalMax für BigDecimal.

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

@Pattern zur Regex-Validierung

@Pattern(regexp) validiert Strings anhand eines regulären Ausdrucks. Dies eignet sich beispielsweise für Telefonnummern, Postleitzahlen und benutzerdefinierte Formate.

@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 und @URL

@Email validiert das E-Mail-Format (grundlegend nach RFC 5321). @URL (Hibernate) validiert das URL-Format. Kombinieren Sie beide immer mit @NotBlank, da sie null-Werte zulassen.

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

@Past, @Future, @PastOrPresent

Temporale Constraints validieren Datums- und Zeitwerte. Sie funktionieren mit LocalDate, LocalDateTime, Instant und weiteren Typen.

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

Validierung mit @Valid auslösen

Fügen Sie @Valid einem Methodenparameter eines Controllers hinzu. Spring validiert das Objekt und löst bei einem Fehler MethodArgumentNotValidException aus, woraufhin eine 400 Bad Request zurückgegeben wird.

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

Kaskadierende Validierung mit @Valid auf Feldern

Um verschachtelte Objekte zu validieren, annotieren Sie das Feld zusätzlich zu den Constraints auf Klassenebene mit @Valid.

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

Validierungsgruppen

Verwenden Sie Gruppen, um in unterschiedlichen Kontexten verschiedene Constraints anzuwenden (z. B. bei Create und Update). Annotieren Sie die Constraints mit dem Gruppen-Interface und lösen Sie die Validierung mit @Validated(CreateGroup.class) aus.

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) { ... }

Validierungsfehler auslesen

Fangen Sie MethodArgumentNotValidException in einer @ControllerAdvice ab, um Feldfehler zu extrahieren und strukturierte Fehlerantworten zu erstellen.

@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);
}

Kurze Überprüfung

Welche Annotation stellt sicher, dass ein String nicht null und nicht leer bzw. nicht ausschließlich aus Leerzeichen besteht?

Zusammenfassung

Annotieren Sie DTOs mit Bean-Validation-Constraints. Fügen Sie in Controllern @Valid hinzu, um die Validierung auszulösen. Verwenden Sie @NotBlank für Strings, @Size für Längen, @Pattern für reguläre Ausdrücke und @Past/@Future für Datumswerte. Behandeln Sie Fehler in einer @ControllerAdvice.

Häufig gestellte Fragen

Ist die Lektion „Bean Validation: @NotNull, @Size, @Pattern“ kostenlos?

Ja — der vollständige Text von „Bean Validation: @NotNull, @Size, @Pattern“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Bean Validation: @NotNull, @Size, @Pattern“?

Annotieren Sie DTOs mit Bean-Validation-Constraints und lösen Sie die Validierung mit @Valid in Controllern aus. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Bean Validation: @NotNull, @Size, @Pattern“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Bean Validation: @NotNull, @Size, @Pattern
  2. Eigene Constraint-Annotationen
  3. Globale Ausnahmebehandlung mit @ControllerAdvice
  4. RFC 7807 Problem Details und konsistente Fehlerantworten
← Zurück zu Java Academy