1
resposta

[Dúvida] O endereço não atualiza

Por mais que eu mande o endereço alterado no body do put, o endereço não altera. Não recebo erro na requisição. Conseguem ver algo errado?

MedicoController

    @PutMapping
    @Transactional
    public void atualizar(@RequestBody @Valid DadosUpdateMedico dados){
        var medico = repository.getReferenceById(dados.id());
        medico.atualizarCadastro(dados);
    }
public record DadosUpdateMedico(
        @NotNull
        Long id,
        String nome,
        String telefone,
        DadosEndereco endereco) {
}

Método atualizar cadastro na entidade Médico

    public void atualizarCadastro(DadosUpdateMedico dados) {
        if (dados.nome() != null){
            this.nome = dados.nome();
        }
        if (dados.telefone() != null){
            this.telefone = dados.telefone();
        }
        if (dados.endereco() != null){
            this.endereco.atualizarEndereco(dados.endereco());
        }

    }

Método atualizar endereço na classe Endereço

 public void atualizarEndereco(DadosEndereco dados) {
        if(dados.logradouro() != null){
            this.logradouro = dados.logradouro();
        }
        if(dados.bairro() != null){
            this.bairro = dados.bairro();
        }
        if(dados.cep() != null){
            this.cep = dados.cep();
        }
        if(dados.cidade() != null){
            this.cidade = dados.cidade();
        }
        if(dados.uf() != null){
            this.uf = dados.uf();
        }
        if(dados.complemento() != null){
            this.complemento = dados.complemento();
        }
        if(dados.numero() != null){
            this.numero = dados.numero();
        }

    }
1 resposta

Boa noite.

Para retornar erro o mais adequado seria alterar seu método void para a classe ResponseEntity, permitindo manipular a resposta como um todo. Assim, cria-se um retorno para a classe ResponseEntity.ok (fazendo com que retorne o código 200 indicando que a requisição foi bem sucedida) e posteriormente deve se criar um DTO para detalhar os dados do Médico e chamando a variavel criada dentro do método atualizar.

Assim o código ficaria mais ou menos assim:

@Transactional
@PutMapping
public ResponseEntity atualizar(@RequestBody @Valid DadosAtualizacaoMedico dados){
    var medico = repository.getReferenceById(dados.id());
    medico.atualizarInformacoes(dados);

    return ResponseEntity.ok(new DadosDetalhamentoMedico(medico));
}