Datenvalidierung in Java: Überblick über Tools und Bibliotheken

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenvalidierung in Java: Überblick über Tools und Bibliotheken



Datenvalidierung (Korrektheitsprüfung) ist einer der wichtigsten Schritte bei der Entwicklung jeder Anwendung. Ohne zuverlässige Prüfung der Eingabedaten wird die Anwendung anfällig für Fehler, fehlerhaftes Verhalten und Angriffe. In Java gibt es mehrere bewährte Ansätze und Bibliotheken, mit denen Sie die Validierung schnell, flexibel und mit minimalem Boilerplate-Code implementieren können.



In diesem Artikel betrachten wir die wichtigsten Tools zur Datenvalidierung in Java: den Standard Bean Validation (Jakarta Validation), seine bekannteste Implementierung Hibernate Validator sowie eine Alternative – Apache Commons Validator. Außerdem gehen wir auf die manuelle Validierung für einfache Fälle ein.



1. Der Standard Bean Validation (Jakarta Validation)



Bean Validation (früher JSR 380, heute Jakarta Validation) ist eine Spezifikation, die eine Reihe von Annotationen für die deklarative Validierung von Java-Objekten definiert. Die Grundidee: Sie beschreiben die Prüfregeln direkt in den Feldern der Klasse mit Annotationen, und die Validierungs-Engine prüft sie automatisch.



Wichtige Annotationen



  • @NotNull – Der Wert darf nicht null sein.
  • @NotEmpty – Zeichenkette, Sammlung oder Array dürfen nicht leer sein (und nicht null).
  • @NotBlank – Zeichenkette darf nicht leer sein oder nur aus Leerzeichen bestehen.
  • @Size(min, max) – Einschränkung der Länge einer Zeichenkette, Größe einer Sammlung oder eines Arrays.
  • @Min / @Max – Numerische Einschränkungen.
  • @Pattern(regexp = "...") – Prüfung mit regulärem Ausdruck.
  • @Email – Prüfung des E-Mail-Formats.


Anwendungsbeispiel



import jakarta.validation.constraints.*;

public class User { @NotBlank(message = "Name darf nicht leer sein") @Size(min = 2, max = 50) private String name;

@Email(message = "Ungültige E-Mail") @NotNull private String email;

@Min(18) @Max(120) private int age;

// Getter und Setter}


Zum Starten der Validierung wird das Objekt Validator verwendet:



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("invalid-email"); user.setAge(10);

Set<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> violation : violations) { System.out.println(violation.getMessage()); } }}


2. Hibernate Validator – Implementierung des Standards



Hibernate Validator ist die Referenzimplementierung der Bean-Validation-Spezifikation. Sie unterstützt alle Annotationen von Jakarta Validation vollständig und fügt eigene Erweiterungen hinzu, wie @URL, @CreditCardNumber, @ISBN und andere.



Zusätzliche Funktionen

  • Benutzerdefinierte Validatoren – Sie können eigene Annotationen und Prüflogik erstellen.
  • Validierungsgruppen – Prüfung verschiedener Regelsätze je nach Kontext (z. B. Erstellung vs. Aktualisierung).
  • Integration mit Spring Boot, Java EE / Jakarta EE out of the box.


Beispiel eines benutzerdefinierten Validators



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 "Ungültige Telefonnummer"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};}


import jakarta.validation.ConstraintValidator;import jakarta.validation.ConstraintValidatorContext;

public class PhoneValidator implements ConstraintValidator<ValidPhone, String> { @Override public boolean isValid(String phone, ConstraintValidatorContext context) { if (phone == null) { return false; } return phone.matches("\\\\+?[0-9]{7,15}"); }}


3. Apache Commons Validator



Apache Commons Validator ist eine separate Bibliothek, die eine Reihe von vorgefertigten Validatoren für gängige Datentypen bereitstellt. Sie ist nicht mit dem Bean-Validation-Standard verbunden, kann aber als einfache Alternative für Projekte verwendet werden, die keine vollständige Jakarta-Integration benötigen.



Wichtige Klassen

  • EmailValidator – E-Mail-Prüfung.
  • UrlValidator – URL-Prüfung.
  • CreditCardValidator – Kreditkartenprüfung.
  • RegexValidator – Prüfung mit regulärem Ausdruck.


Anwendungsbeispiel



import org.apache.commons.validator.routines.EmailValidator;

public class CommonsValidationExample { public static void main(String[] args) { EmailValidator validator = EmailValidator.getInstance(); String email = "test@example.com"; if (validator.isValid(email)) { System.out.println("E-Mail ist gültig"); } else { System.out.println("Ungültige E-Mail"); } }}


4. Manuelle Validierung



In einfachen Fällen, wenn die Verwendung von Bibliotheken nicht gerechtfertigt ist, können Sie die Validierung manuell durchführen. Dieser Ansatz eignet sich für kleine Projekte oder wenn Sie die Logik vollständig kontrollieren müssen.



Beispiel



public class ManualValidation {    public static boolean isValidEmail(String email) {        return email != null && email.contains("@") && email.contains(".");    }

public static boolean isValidAge(int age) { return age >= 18 && age <= 120; }

public static void main(String[] args) { String email = "test@example.com"; int age = 25;

if (!isValidEmail(email)) { System.out.println("Ungültige E-Mail"); } if (!isValidAge(age)) { System.out.println("Ungültiges Alter"); } }}


Fazit



Die Wahl des Validierungstools hängt von den Anforderungen Ihres Projekts ab:

  • Bean Validation (Jakarta Validation) + Hibernate Validator – die Standardlösung für Unternehmensanwendungen, insbesondere bei Verwendung von Spring Boot oder Jakarta EE.
  • Apache Commons Validator – geeignet für einfache Projekte, die keine vollständige Jakarta-Integration benötigen.
  • Manuelle Validierung – für kleine Skripte oder wenn Sie die Logik vollständig kontrollieren müssen.


Unabhängig von der gewählten Methode: Vergessen Sie nicht, die Eingabedaten immer zu validieren – das schützt Ihre Anwendung vor vielen Problemen.

Empfehlungen