java / expert
Snippet
Service-Aware Custom Constraint Validators
By marking a ConstraintValidator as a Spring @Component, the framework automatically handles dependency injection. This allows performing complex business logic validation, such as checking database uniqueness, directly via JSR-303 annotations.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
@Componentpublic class UniqueEmailValidator implements ConstraintValidator<UniqueEmail, String> {private final UserRepository userRepository;public UniqueEmailValidator(UserRepository userRepository) {this.userRepository = userRepository;}@Overridepublic boolean isValid(String email, ConstraintValidatorContext context) {if (email == null) return true;return !userRepository.existsByEmail(email);}}
spring
Breakdown
1
implements ConstraintValidator<UniqueEmail, String>
Binds the validator to a specific custom annotation and the target data type.
2
private final UserRepository userRepository;
Injected Spring bean used to perform lookups during validation.
3
return !userRepository.existsByEmail(email);
The actual validation logic checking state against a persistent data store.