0 Tage Serie
java / expert
Snippet

Benutzerdefinierte Constraint-Validatoren für komplexe Domänenlogik

Über die einfache Feldvalidierung hinaus unterstützt Spring Class-Level-Constraints via ConstraintValidator. Dies ermöglicht komplexe Validierungslogik, die mehrere Felder innerhalb eines Objekts einbezieht und die Domänenintegrität wahrt.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class PasswordMatchesValidator implements ConstraintValidator<PasswordMatches, UserDto> {
@Override
public boolean isValid(UserDto user, ConstraintValidatorContext context) {
return user.getPassword().equals(user.getMatchingPassword());
}
}
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = PasswordMatchesValidator.class)
public @interface PasswordMatches {
String message() default "Passwords don't match";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
spring
Erklärung
1
implements ConstraintValidator<PasswordMatches, UserDto>
Verknüpft die benutzerdefinierte Annotation mit der Logik, die das spezifische DTO validiert.
2
@Constraint(validatedBy = PasswordMatchesValidator.class)
Die Annotationsmetadaten, die Spring auf die Implementierungsklasse für die Validierungslogik hinweisen.
3
user.getPassword().equals(user.getMatchingPassword())
Die eigentliche Geschäftslogik, die zwei Felder innerhalb des DTOs vergleicht.