Olá,
Estou desenvolvendo uma API que cadastra clientes. Quando eu vou fazer a persistência dos dados com o repository, eu recebo uma exception informando que o obejto que eu estou querendo salvar está null (java.lang.NullPointerException: Cannot invoke “syshotel.com.api.domain.cliente.CLientePjRepository.save(Object)” because “this.cLientePjRepository” is null) . Estou recebendo os dados via JSON pelo insominia, instancio uma variável com os dados recebidos do insominia, já fiz a verificação e constatei que de fato foi instanciado com os dados corretamente, mas mesmo assim não consigo fazer a persistência. Segue abaixo as minhas classes:
Controller
@RestController
@RequestMapping("/clientes")
public class ClienteController {
@Autowired
private CadastraCliente clienteService;
@PostMapping
@Transactional
private void cadastrar(@RequestBody DadosCadastroCliente dados) {
clienteService.cadastrar(dados);
}
}
PessoaJuridica
@Entity(name = "PessoaJuridica")
@Table(name = "clientes_pj")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class PessoaJuridica extends Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="razao_social")
private String razaoSocial;
@Column(name="nome_fantasia")
private String nomeFantasia;
private String cnpj;
private String email;
@OneToMany(mappedBy = "pessoaJuridica")
private List<Endereco> endereco;
@OneToOne
private Telefone telefone;
public PessoaJuridica(String razaoSocial, String nomeFantasia, String cnpj, String email) {
this.razaoSocial = razaoSocial;
this.nomeFantasia = nomeFantasia;
this.cnpj = cnpj;
this.email = email;
}
}
Classe Cliente Service (CadastraCliente):
@Service
public class CadastraCliente {
@Autowired
private ClientePfRepository clientePfRepository;
@Autowired
private ClientePjRepository clientePjRepository;
@Autowired
private EnderecoRepository enderecoRepository;
@Autowired
private TelefoneRepository telefoneRepository;
public void cadastrar(DadosCadastroCliente dados){
if(dados.isJuridico()){
var clientePj = clientePjRepository.save(new PessoaJuridica(dados.razaoSocial(),
dados.nomeFantasia(), dados.cnpj(), dados.email()));
var endereco = dados.endereco();
var telefone = dados.telefone();
for (DadosEndereco item : endereco){
var enderecoPj = new Endereco(item, null, clientePj);
enderecoRepository.save(enderecoPj);
}
var telefonePj = new Telefone(telefone, null, clientePj);
telefoneRepository.save(telefonePj);
} else if(!dados.isJuridico()){
var clientePf = clientePfRepository.save(new PessoaFisica(dados.nome(), dados.dataNascimento(),
dados.cpf(), dados.rg(), dados.sexo(), dados.email()));
var endereco = dados.endereco();
var telefone = dados.telefone();
for (DadosEndereco item : endereco){
var enderecoPj = new Endereco(item, clientePf, null);
enderecoRepository.save(enderecoPj);
}
var telefonePj = new Telefone(telefone, clientePf, null);
telefoneRepository.save(telefonePj);
}
}
}
JSON envido pelo insomnia
{
"isJuridico": true,
"razaoSocial": "Fábrica de Panelas S/A",
"nomeFantasia": "Panelas de Ouro",
"cnpj": "11111111111111111",
"email": "financeiro@panelasdeouro.com.br",
"endereco": [
{
"cep": "44444444",
"logradouro": "Av das Panelas",
"numero": "44",
"bairro": "Centro",
"cidade": "Taquarana",
"estado": "AL"
},
{
"cep": "55555555",
"logradouro": "Av das Tampas",
"numero": "77",
"bairro": "Árvores",
"cidade": "Taquarana",
"estado": "AL"
}
]
}
Alguém poderia me informar qo que eu estou fazendo de errado?