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!