Estou tendo um problema ao chamar um endpoint do meu controller na minha API. A seguinte exceção é lançada:
jakarta.servlet.ServletException: Request processing failed: java.lang.NullPointerException: Cannot invoke "com.porto.HealthLabApi.services.PessoaService.listarPessoas(org.springframework.data.domain.Pageable)" because "this.pessoaService" is null
A principio eu anotei corretamente a minha classe de @Service e @Repository. Segue minhas classes.
Controller:
@RestController
@RequestMapping("/pessoa")
public class PessoaController {
@Autowired
private ResponseHandler responseHandler;
@Autowired
private PessoaService pessoaService;
@GetMapping
private ResponseEntity<Object> listarPessoas(@PageableDefault(size = 10, sort = {"nome"}) Pageable paginacao){
var pessoas = pessoaService.listarPessoas(paginacao).map(ResponsePessoa::new);
return responseHandler.generateResponse("Consulta realizada com sucesso", true, HttpStatus.OK, pessoas);
}
@GetMapping("/{id}")
private ResponseEntity<Object> detalharPessoa(@PathVariable Long id){
var pessoa = pessoaService.detalharPessoa(id);
return responseHandler.generateResponse("Consulta realizada com sucesso", true, HttpStatus.OK, pessoa);
}
@PostMapping
@Transactional
private ResponseEntity<Object> cadastrarPessoa(@RequestBody @Valid RequestCadastrarPessoa dadosPessoa){
var pessoaCriada = pessoaService.cadastrarPessoa(dadosPessoa);
return responseHandler.generateResponse("Cadastrado com sucesso", true, HttpStatus.CREATED, pessoaCriada);
}
@PutMapping
@Transactional
private ResponseEntity<Object> editarPessoa(@RequestBody @Valid RequestEditarPessoa dadosPessoa){
var pessoaEditada = pessoaService.editarPessoa(dadosPessoa);
return responseHandler.generateResponse("Editado com sucesso", true, HttpStatus.OK, pessoaEditada);
}
@DeleteMapping("/{id}")
@Transactional
private ResponseEntity<Object> deletarPessoa(@PathVariable Long id){
pessoaService.deletarPessoa(id);
return responseHandler.generateResponse("Deletado com sucesso", true, HttpStatus.OK, null);
}
}
Service:
@Service
public class PessoaService {
@Autowired
private PessoaRepository pessoaRepository;
public Page<Pessoa> listarPessoas(Pageable paginacao) {
return pessoaRepository.findAll(paginacao);
}
public Pessoa cadastrarPessoa(@Valid RequestCadastrarPessoa dadosPessoa) {
var pessoa = new Pessoa(dadosPessoa);
return pessoaRepository.save(pessoa);
}
public Pessoa detalharPessoa(Long id) {
return pessoaRepository.getReferenceById(id);
}
public Pessoa editarPessoa(@Valid RequestEditarPessoa dadosPessoa) {
var pessoa = pessoaRepository.getReferenceById(dadosPessoa.id());
pessoa.atualizarInformacoes(dadosPessoa);
return pessoaRepository.save(pessoa);
}
public void deletarPessoa(Long id) {
var pessoa = pessoaRepository.getReferenceById(id);
System.out.println(pessoa.getNome());
pessoaRepository.delete(pessoa);
}
}
Repository:
@Repository
public interface PessoaRepository extends JpaRepository<Pessoa, Long> {
Page<Pessoa> findAll(Pageable paginacao);
}
Revirei o código e acabei não encontrando a causa de meu service estar nulo :(