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

[Dúvida] Erro no método Update

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());
        }
    }
2 respostas
solução!

Olá Jhonatan!

Acho que isto está acontecendo pq no if do endereço na classe Medico está verificando o telefone this.telefone != null. Deve acontecer sempre que deixa de preencher o endereço.

if(this.telefone != null){
            this.endereco.atualizaEndereco(dados.endereco());
        }

Olá Gabriel,

Que vacilo, era isso mesmo ajustei o trecho do código para:

        if(dados.endereco() != null){
            this.endereco.atualizaEndereco(dados.endereco());
        }

E deu tudo certo.

Muito obrigado Gabriel.