1
resposta

NullPointerException ao realizar POST na URL

Fiz o código conforme as aulas, e ao realizar a requisição POST na URL "/compras" é apresentado o seguinte erro:

java.lang.NullPointerException: Cannot invoke "br.com.alura.microservice.loja.controller.dto.InfoFornecedorDTO.getEndereco()" because the return value of "org.springframework.http.ResponseEntity.getBody()" is null

PS: eu refiz todas as aulas passo a passo (assistindo no 0.5x), mas não rolou. Depois, copiei os arquivos disponibilizados para download para a minha pasta dos projetos e permaneceu ocorrendo.

Talvez eu esteja muito próximo do problema, talvez por isso não consigo encontrar o erro. Alguém poderia dar uma luz quanto a isso?

Obrigado! :')

Print da requisição:

imagem contendo requisção do tipo POST e a resposta obtida foi erro 500

A seguir, os códigos das respectivas classes envolvidas no POST.

Classe CompraDTO:

package br.com.alura.microservice.loja.controller.dto;

import java.util.List;

public class CompraDTO {

    private List<ItemDaCompraDTO> itens;
    private EnderecoDTO endereco;

    public List<ItemDaCompraDTO> getItens() {
        return itens;
    }

    public void setItens(List<ItemDaCompraDTO> itens) {
        this.itens = itens;
    }

    public EnderecoDTO getEndereco() {
        return endereco;
    }

    public void setEndereco(EnderecoDTO endereco) {
        this.endereco = endereco;
    }

}

Classe InfoFornecedorDTO:

package br.com.alura.microservice.loja.controller.dto;

public class InfoFornecedorDTO {

    private String endereco;

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

}

Classe CompraService:

package br.com.alura.microservice.loja.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import br.com.alura.microservice.loja.controller.dto.CompraDTO;
import br.com.alura.microservice.loja.controller.dto.InfoFornecedorDTO;

@Service
public class CompraService {

    @Autowired
    private RestTemplate client;

    public void realizaCompra(CompraDTO compra) {

        ResponseEntity<InfoFornecedorDTO> exchange =
                client.exchange("http://fornecedor/info/"+compra.getEndereco().getEstado(),
                HttpMethod.GET, null, InfoFornecedorDTO.class);

        // Aqui que o bicho pega
        System.out.println(exchange.getBody().getEndereco()); 
    }

}
1 resposta

Olá Diogenes,

O problema é que o objeto do response acessado via 'getBody()' está nulo.

Provavelmente porque não chegou nenhum dado no response:

  • por conta do serviço chamado não ter respondido com nenhum dado mesmo, ou;
  • por ele ter respondido com erro.

Sugiro você testar se o status code no response foi HTTP 200 OK, pois a requisição pode estar retornando algum erro (4xx ou 5xx).

Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software