1
resposta

[Dúvida] HttpClient não retorna json

O modo ensinado no curso, HttpRequest/HttpResponse não retorna json e nem exceção, utilizei RestTemplate, então retorna, poque não funcionou?

public String obterDados(String url) {
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
        return response.getBody();
    }
1 resposta

Olá Sandro! Tudo joia?

O código que você forneceu para RestTemplate está correto e deve funcionar bem para consumir APIs REST. Agora, vamos dar uma olhada no código usando HttpClient:

public String obterDados(String endereco) {
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(endereco))
            .build();
    HttpResponse<String> response = null;
    try {
        response = client
                .send(request, HttpResponse.BodyHandlers.ofString());
    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }

    String json = response.body();
    return json;
}

Algumas coisas que você pode verificar:

  1. Verifique a URL: Certifique-se de que a URL que você está passando para o HttpClient está correta e acessível. Às vezes, uma URL incorreta ou inacessível pode resultar em uma resposta vazia ou erro.

  2. Cabeçalhos HTTP: Algumas APIs exigem cabeçalhos específicos, como Accept: application/json. Você pode adicionar cabeçalhos ao seu HttpRequest da seguinte forma:

    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(endereco))
            .header("Accept", "application/json")
            .build();
    
  3. Tratamento de erros: Verifique se há mensagens de erro ou códigos de status HTTP na resposta. Você pode adicionar um log para ver o status da resposta:

    try {
        response = client.send(request, HttpResponse.BodyHandlers.ofString());
        int statusCode = response.statusCode();
        System.out.println("Status Code: " + statusCode);
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
    
  4. Depuração: Adicione logs para depurar e ver o que está acontecendo em cada etapa. Por exemplo:

    System.out.println("Sending request to: " + endereco);
    String json = response.body();
    System.out.println("Response body: " + json);
    

Se após essas verificações o problema persistir, pode ser útil comparar as respostas de HttpClient e RestTemplate para a mesma URL. Isso pode ajudar a identificar se há alguma diferença no comportamento entre os dois métodos.

Espero ter ajudado e bons estudos!

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