1
resposta

cross field

Olá, pessoal!

Tenho a seguinte classe abaixo:

public class Pessoa implements Serializable {

    private static final long serialVersionUID = 1L;

    @NotBlank
    private String cpf;

    private boolean naoPossuiCPF;

    @NotBlank
    private String nome;

}

Queria saber como faço para se o atributo naoPossuiCPF for marcado como verdadeiro o CPF pode ser nulo.

1 resposta

Oi Philip, acho que nesse caso você vai precisa criar um validador personalizado, pois essa é uma validação que depende de dois atributos da classe.

Algo como:

@CPFObrigatorio
public class Pessoa implements Serializable {

    private static final long serialVersionUID = 1L;

    private String cpf;
    private boolean naoPossuiCPF;

    @NotBlank
    private String nome;
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CPFObrigatorioValidator.class)
public @interface CPFObrigatorio {
    String message() default "CPF deve ser informado!";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
public class CPFObrigatorioValidator implements ConstraintValidator<CPFObrigatorio, Pessoa>{

    @Override
    public void initialize(CPFObrigatorio anotacao) {
    }

    @Override
    public boolean isValid(Pessoa pessoa, ConstraintValidatorContext ctx) {
        if(pessoa == null) {
            return true;
        }

        //faz um if pra verificar se o cpf foi preenchido e devolve false caso nao esteja preenchido...
    }
}

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software