Spezifikation / Library-APIQuality3.1

Jakarta Validation

Jakarta Validation definiert deklarative Objektvalidierung mit Constraints, Gruppen und Validatoren.

Einordnung
Spezifikation / Library-API
Enterprise-Rolle
Validierung schützt Systemgrenzen und dokumentiert fachliche Eingaberegeln nahe am Modell.
Diagramm zu Jakarta Validation

Fachliches Verständnis

Validierung schützt Systemgrenzen und dokumentiert fachliche Eingaberegeln nahe am Modell. In der Praxis ist wichtig, die Spezifikation nicht mit der konkreten Runtime zu verwechseln. Der Standard beschreibt die portablen APIs, die Implementierung entscheidet über Konfiguration, Performance, Betrieb und Support.

Kernkonzepte

  • @NotNull, @Size, @Email, @Positive.
  • Eigene Constraints.
  • Validation Groups.
  • Cascaded Validation mit @Valid.

Typische Einsatzfälle

  • REST Request DTOs validieren.
  • Fachliche Invarianten ergänzend absichern.
  • Konfigurationsobjekte validieren.

Technisches Beispiel

java
public record PlaceOrderRequest(
    @NotBlank String customerNumber,
    @NotEmpty List<@Valid OrderLineRequest> lines
) {}

public record OrderLineRequest(
    @NotBlank String sku,
    @Positive int quantity
) {}

@ApplicationScoped
public class PlaceOrderUseCase {
    public OrderId place(@Valid PlaceOrderRequest request) { /* ... */ return OrderId.newId(); }
}
Architekturregel: Jakarta APIs gehören an Systemgrenzen und Infrastrukturpunkte. Fachentscheidungen bleiben in Application Services und Domain-Modellen testbar und möglichst unabhängig vom Container.

Enterprise-Fallen

  • Validation ersetzt keine Fachlogik.
  • Gruppen werden unverständlich.
  • Fehlermeldungen nicht lokalisiert.

Legacy-Modernisierung

Alte manuelle if-Kaskaden in Controllern können in Constraints und Domain-Regeln geteilt werden.

Vertiefung: Review-Fragen für Senior-Entwickler
  • Welche Spezifikation ist hier wirklich nötig?
  • Welche Runtime-Funktion wird genutzt und ist sie portabel?
  • Wo liegt die Transaktionsgrenze?
  • Sind API-Verträge, DTOs und Domain-Modelle getrennt?
  • Ist der Code ohne Application Server testbar?