Oi Diego,
Vamos lá!
- Sim, é possível criar anotações de validação personalizadas usando o Bean Validation em Java. Para criar uma anotação personalizada, você precisará criar uma classe que estenda a classe javax.validation.Constraint. Aqui está um exemplo de como fazer isso:
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Documented
@Constraint(validatedBy = ValidCPFValidator.class)
@Target({ TYPE, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
public @interface ValidCPF {
String message() default "CPF inválido";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Neste exemplo, a anotação @ValidCPF é criada com uma mensagem de erro padrão e é validada pelo Validator ValidCPFValidator. Você pode usar essa anotação em qualquer atributo ou classe que precise validar um CPF.
2.
Quanto ao melhor lugar para colocar a validação de um CPF, isso depende do contexto da sua aplicação. Se a validação de CPF for uma operação comum que é usada em vários lugares da sua aplicação, pode ser conveniente criar um Serviço para realizar essa validação e chamar esse serviço onde for necessário.
No entanto, se a validação de CPF for um processo específico que é usado apenas em um ou dois lugares da sua aplicação, pode ser mais conveniente usar a anotação de validação personalizada do Bean Validation diretamente no lugar onde a validação é necessária. Isso pode ser mais simples e mais direto, e evita a necessidade de criar um serviço adicional.
Abcs!