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
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
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!