Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Estou recebendo o erro

Sempre que tento cadastrar o médico no banco recebo esse erro no postman:

"message": "Cannot invoke "med.voll.api.Model.MedicosRepository.save(Object)" because "this.repository" is null", "path": "/medicos"

Vale citar que estou usando o PostgreSQL. Já verifiquei mais de uma vez o código, segue imagens das classes e interface:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade


package med.voll.api.Model;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import med.voll.api.Dto.MedicosDto;
import med.voll.api.Enums.Especialidade;

@Table(name = "medicos")
@Entity(name = "Medico")
@Getter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(of = "id")
public class MedicosModel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String email;
    private String crm;

    @Enumerated(EnumType.STRING)
    private Especialidade especialidade;

    @Embedded
    private EnderecoModel endereco;

    public MedicosModel(MedicosDto data){
        this.nome = data.nome();
        this.email = data.email();
        this.crm = data.crm();
        this.especialidade = data.especialidade();
        this.endereco = new EnderecoModel(data.endereco());
    }

}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Olá Cauã! Tudo bem?

O seu problema está no método cadastrMedicos, você definiu esse método como sendo private o que impossibilita de acessá-lo fora da classe MedicosController. E por conta disso o Spring não consegue fazer o mapeamento correto desse método, causando assim o erro que você recebeu.

Para resolver isso basta alterar a declaração do método de private para public:

@RestController
@RequestMapping("medicos")
public class MedicosController {

    @Autowired
    private MedicosRepository repository;

    @PostMapping
    @Transactional
    public void cadastraMedicos(@RequestBody MedicosDto data) {
        repository.save(new MedicosModel(data));
    }
}

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.