Olá Cheguei na parte do curso que atualiza o médico e estou tendo o seguinte erro:
java.lang.NullPointerException: Cannot invoke "med.voll.med.models.dtos.EnderecoDTO.logradouro()" because "obj" is null
Estou fazendo apenas uma coisa diferente do curso, ao invés de chamar o repository direto na classe Controller, eu criei as classes de serviços para chamar os repositories e nos controllers eu chamo a classe serviço, já vi em outros materiais que isso é uma boa prática para centralizar as regras de negócio nas classes services, porém tive esse problema que não sei se tem referência com essas alterações, segue trechos do código:
Endereço DTO
public record EnderecoDTO(
@NotBlank
String logradouro,
String numero,
String complemento,
@NotBlank
String bairro,
@NotBlank
String cidade,
@NotBlank
String uf,
@NotBlank
@Pattern(regexp = "\\d{8}")
String cep) {
}
Método Atualiza Endereço que está na Classe Endereço
public void atualizaEndereco(EnderecoDTO obj){
if(obj.logradouro()!= null){
this.logradouro = obj.logradouro();
}
if(obj.numero() != null){
this.numero = obj.numero();
}
if(obj.complemento() != null){
this.complemento = obj.complemento();
}
if(obj.bairro() != null){
this.bairro = obj.bairro();
}
if(obj.cidade() != null){
this.cidade = obj.cidade();
}
if(obj.uf() != null){
this.uf = obj.uf();
}
if(obj.uf() != null){
this.cep = obj.cep();
}
}
}
Service
public void update(MedicoAtualizaDTO dados){
var medico = repository.getReferenceById(dados.id());
medico.atualizaDados(dados);
}
Controller
@PutMapping
public ResponseEntity<Void> update(@RequestBody @Valid MedicoAtualizaDTO obj){
service.update(obj);
return ResponseEntity.ok().build();
}
Método Atualiza dados Médico que está na classe Médico
public void atualizaDados(MedicoAtualizaDTO dados) {
if(dados.nome() != null){
this.nome = dados.nome();
}
if(dados.telefone() != null){
this.telefone = dados.telefone();
}
if(this.telefone != null){
this.endereco.atualizaEndereco(dados.endereco());
}
}