6
respostas

Reuso de validation bean

Tentei aplicar a solução demonstrada no tópico citado abaixo, mas não consegui.

Poderia detalhar a solução?

https://cursos.alura.com.br/forum/topico-duvida-reaproveitar-bean-validations-287099

6 respostas

Oi!

Manda aqui como ficou seu código que ajudamos a ajustar.

Depois de uma noite de sono, consegui superar o meu erro. Segue solução se interessar a mais alguém:

public interface TelefoneValido {
    @NotBlank
    @Pattern(regexp = "\\d{8,13}")
    String getTelefone();
}

public record DadosCadastroMedico(
        @NotBlank
        String nome,
        @NotBlank
        @Email
        String email,
        @NotBlank
        @Pattern(regexp = "\\d{4,6}")
        String crm,
        String telefone,
        @NotNull
        Especialidade especialidade,
        @NotNull
        @Valid
        DadosEndereco endereco) implements TelefoneValido {

        @Override
        public String getTelefone() {
                return this.telefone;
        }
}

Boa!

Uma dica, se você renomear o método na interface de getTelefone() para telefone(), não vai precisar sorbescrever esse método no record:

public interface TelefoneValido {
    @NotBlank
    @Pattern(regexp = "\\d{8,13}")
    String telefone();
}
public record DadosCadastroMedico(
        @NotBlank
        String nome,
        @NotBlank
        @Email
        String email,
        @NotBlank
        @Pattern(regexp = "\\d{4,6}")
        String crm,
        String telefone,
        @NotNull
        Especialidade especialidade,
        @NotNull
        @Valid
        DadosEndereco endereco) implements TelefoneValido {}

Rodrigo, fiz a mudança sugerida. No entanto, a validação decorrente das anotações inseridas na interface não funcionam.

Somente ao implementar o método da interface, a validação ocorre como prevista.

Para esclarecer:

Só funcionou usando a interface desta forma:

public interface TelefoneValido {
    @NotBlank
    @Pattern(regexp = "\\d{8,13}")
    String getTelefone();
}

Ao mudar o método para telefone() não funcionou.

Oi Camila!

Verdade! Fui olhar na especificação do Bean Validation e existe essa restrição do método seguir o padrão getter ao utilizar interfaces.

Então, infelizmente, vai ser necessário sobrescrever cada método da interface nos records que a implementarem.

Bons estudos!