1
resposta

Como utilizar esses validadores em um atributo de outra Classe

Olá, como vão/vai?

Show de bola as aulas sobre validação de CPF/CNPJ. Como poderia utilizar como validador de um atributo de outra classe? Exemplo: tenho o campo DOCUMENTO em que o usuário entrará com valor de CPF OU CNPJ, no caso o sistema deve aceitar/validar um ou outro, de acordo com a entrada do usuário. Neste caso, qual a tratativa para conseguir implementar tais validações neste atributo?

Agradeço desde já!

1 resposta

Olá, Willians, tudo bem?

Caso você necessite validar um campo que recebe tanto CPF quanto CNPJ, vc pode criar uma composição das anotações @CPF e @CNPJ. Basta criar uma anotação customizada. Exemplo:

import org.hibernate.validator.constraints.ConstraintComposition;
import org.hibernate.validator.constraints.br.CNPJ;
import org.hibernate.validator.constraints.br.CPF;

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.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import static org.hibernate.validator.constraints.CompositionType.OR;

@Documented
@ConstraintComposition(OR)
@CPF
@CNPJ
@Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = {})
public @interface CpfOrCnpj {

    String message() default "o campo deve ser formatado como cpf ou cnpj";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    @Documented
    @Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})
    @Retention(RUNTIME)
    @interface List {
        CpfOrCnpj[] value();
    }
}