Criando Annotations de Validação! ConstraintValidator customizado
Como aproveitar o Bean Validation para que ele também verifique condições mais complexas acessando o banco de dados?
Usaremos o ConstraintValidator.
Criaremos uma @interface e um Validator (implementando ConstraintValidator):
Criar as duas no pacote service (subpacote Validation).
Annotation
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
@Constraint(validatedBy = UserInsertValidator.class)
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface UserInsertValid {
String message() default "Validation error";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}Validator
isValid - Testerá se o objeto UserInsertDTO será valido ou não (retorna boolean).
Initiliaze - Colocamos alguma lógica quando for inicializar o objeto, neste caso, ficará em branco.
Agora vamos ao UserInsertDTO e passamos o @UserInsertValid. Essa anotação por de baixo dos panos verificará se o email inserido já existe no banco.
Atualizado