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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class PasswordMatchesValidator implements ConstraintValidator<PasswordMatches, UserDto> {@Overridepublic 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.