Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Requisição API Google Books

Estou tentando utilizar a API google books em um programa onde o usuário informe o nome do livro e retorne algumas informações, porém não estou tendo retorno no console

package br.com.busca.livros.busca.livros.service;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class BuscaAPI {
    public String consumirAPI(String endereco){

        String consumo = "https://www.googleapis.com/books/v1/volumes?q=" + endereco + "&key=CHAVE_AQUI";
        endereco.replace(" ", "+");
        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;
    }
}
package br.com.busca.livros.busca.livros;

import br.com.busca.livros.busca.livros.service.BuscaAPI;

public class Main {
    public static void main(String[] args) {
        BuscaAPI bsc = new BuscaAPI();

        System.out.println(bsc.consumirAPI("O alquimista"));
    }
}
package br.com.busca.livros.busca.livros.model;

import com.fasterxml.jackson.annotation.JsonAlias;

public record Livros(@JsonAlias("title") String titulo,
                     @JsonAlias("authors") String autor,
                     @JsonAlias("publisher") String editora,
                     @JsonAlias("publishedDate") String anoLancamento,
                     @JsonAlias("pageCount") int numPaginas,
                     @JsonAlias("type") int isbn,
                     @JsonAlias("description") String descricao) {
}
2 respostas
solução!

Olá, Lucas! Tudo bem?

Pelo que você descreveu, parece que o problema pode estar relacionado a alguns pontos específicos no seu código. Vamos analisar e corrigir alguns detalhes:

  1. Substituição do espaço por "+": A substituição do espaço por "+" não está sendo aplicada corretamente. Você deve fazer isso antes de construir a URL.

  2. Construção da URL: No método consumirAPI, você está criando a URL correta, mas depois está usando a variável endereco em vez da URL completa.

  3. Tratamento de exceções: É sempre bom adicionar mensagens de erro para facilitar a depuração.

Aqui está uma versão corrigida do seu código:

package br.com.busca.livros.busca.livros.service;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class BuscaAPI {
    public String consumirAPI(String endereco){

        // Substitui espaços por "+"
        String query = endereco.replace(" ", "+");
        String consumo = "https://www.googleapis.com/books/v1/volumes?q=" + query + "&key=CHAVE_AQUI";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(consumo))
                .build();
        HttpResponse<String> response = null;
        try {
            response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
        } catch (IOException e) {
            System.err.println("Erro de IO: " + e.getMessage());
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            System.err.println("Requisição interrompida: " + e.getMessage());
            throw new RuntimeException(e);
        }

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

Além disso, recomendo que não compartilhe a sua chave de API em locais públicos, eu editei o seu tópico retirando ela da sua postagem.

Espero ter ajudado e bons estudos!

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

Muito obrigado, Armando! Excelente trabalho :)