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.
Auch in der Bibliothek
Arbeiten mit Daten in Swift (iOS/macOS): Bibliotheken und Frameworks
Arbeiten mit Daten in Swift (iOS/macOS): Bibliotheken und Werkzeuge
OAuth-Client für Kotlin: Ktor OAuth-Bibliothek für API-Authentifizierung
Geolokalisierung und Karten in Swift für iOS/macOS: vollständiger Leitfaden