0 day streak
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
java
1
2
3
4
5
6
7
8
9
10
11
12
@Component
public class UniqueEmailValidator implements ConstraintValidator<UniqueEmail, String> {
private final UserRepository userRepository;
public UniqueEmailValidator(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public 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.