Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

@Valid

Tenho um objeto PESSOA onde eu tenho dois campos que são validados no request através de anotação: @PostMapping(path = "/pessoa", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity pessoa( @Valid @RequestBody Pessoa pessoa ) { }

Quero validar da seguinda maneira:

1 - Validar o CPF ou validar o RG, não os dois, um ou outro.

Eu quero agrupar os validadores.

Poder usar o validador do CPF, que já existe e o validador do RG, que também já existe;

Criando um novo validador, onde eu posso usar os dois validadores numa condição de validar o RG ou validar o CPF;

classe Pessoa { @CPF private CPF @RG private RG }

2 respostas
solução!

Opa Rodrigo, tudo bem?

Então, você pode criar um validator do spring e tem uma forma que você consegue criar sua própria anotação e anotar ela com @ConstraintComposition(CompositionType.OR), que ele especifica que ele irá rodar uma OU outra e ai você consegue compor duas anotações diferentes, que ele irá tenta rodar contra seu atributo, vou deixar um exemplo aqui:


@CPF
@RG
@ConstraintComposition(CompositionType.OR) // Aqui significa que é uma OU outra
@ReportAsSingleViolation // Aqui ele valida, para reportar cada erro individualmente
@Constraint(validatedBy = { }) // Não precisamos aqui de um validator
@Documented
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CPFouRG {

    String message() default "Precisa ser um CPF ou um RG valido";

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

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

}

Espero que dê certo, qualquer coisa só me avisar :)

vlw! @Gabriel Ronei, eu consegui aplicando validador. obrigado pela ajuda