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

[Bug] Erro na compilação, Google Books

Analisei e comparei meu código com os dos outros colegas e meu código parece estar tudo de acordo. Entretanto, quando vou compilar aparece um erro ENORME como resposta no terminal. Achei que podia ser a chave API então fui testar no Postman, mas estava tudo funcionando tranquilamente. Não estou entendo o porquê de não dar a resposta no meu terminal... :(

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

public class App {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
            
        String nomeDoLivro = leitura.nextLine();

        String endereco = "https://www.googleapis.com/books/v1/volumes?q=" + nomeDoLivro + "&key=AIzaSyDyCr2s0_BHuSXCMuPMV3v9VuVK7Yoe8h4";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(endereco))
            .build();
        HttpResponse<String> response = client
            .send(request, BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
4 respostas
solução!

Testei novamente hoje sem ter alterado nada e funcionou (?)

Meu código esta parecido com o seu!

Percebi no meu que ele não faz pesquisas com nomes cumpridos, por exemplo: "A Cabana" ou "O homem mais rico da babilonia"

Dai procurei "Crepusculo", ai funcionou.

Não sei se tem relação com a API.

Isso acontece por conta que estamos apenas agregando uma string de forma literal no meio de uma URL, e a URL não consta espaçamento dentro dela, ela n "entende", por assim dizer. Por exemplo, quando digitamos O homem mais rico da babilônia, estamos integrando na URL exatamente como está aí, ou seja, ela ficaria exatamente assim nesse caso:

https://www.googleapis.com/books/v1/volumes?q=O homem mais rico da babilonia&key=AIzaSyDyCr2s0_BHuSXCMuPMV3v9VuVK7Yoe8h4

Percebe que a URL ficou toda estranha? As URLs não entendem por espaçamento, e sim por hífen. Então para fazer a pesquisa sair de forma coerente teríamos que digitar no terminal da seguinte maneira: o-homem-mais-rico-da-babilonia. Dessa forma a URL ficaria o seguinte:

https://www.googleapis.com/books/v1/volumes?q=o-homem-mais-rico-da-babilonia&key=AIzaSyDyCr2s0_BHuSXCMuPMV3v9VuVK7Yoe8h4

Fale dev...blz ?

Cara isso ocorre justamente pelo fato da geração do espação criado conforme vc mesmo identificou.

Para resolver esse problema basta vc colocar a seguinte linha de comando:

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

public class App {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
            
        String nomeDoLivro = leitura.nextLine();		
        String nomeDoLivroComEspaco = nomeDoLivro.replace(" ","%20");

        String endereco = "https://www.googleapis.com/books/v1/volumes?q=" + nomeDoLivroComEspaco + "&key=AIzaSyDyCr2s0_BHuSXCMuPMV3v9VuVK7Yoe8h4";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(endereco))
            .build();
        HttpResponse<String> response = client
            .send(request, BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

Criei, no seu código, a variável nomeDoLivroComEspaco e ela utiliza o replace que é um método da biblioteca java utilizado para substituir, no caso, o espaço em branco pelo %20. Assim, na chamada da API será possível ler sem que cause problema.

Espero ter ajudado.

Vlw.