Codigo da minha classe principal
package br.com.alura.screenmatch.Main;
import br.com.alura.screenmatch.Excecao.ErroDeFormatacao;
import br.com.alura.screenmatch.Modelos.Filme;
import br.com.alura.screenmatch.Modelos.Titulo;
import br.com.alura.screenmatch.Modelos.TituloOmdb;
import br.com.alura.screenmatch.Static.Encoder;
import br.com.alura.screenmatch.Static.RequestHttp;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MainSearch {
public static void main(String[] args) throws IOException, InterruptedException {
//DEFININDO VARIAVEL DE AMBIENTE
String API = System.getenv("OMDB_API_KEY");
List<Titulo> meusFilmes = new ArrayList<>();
// CRIANDO O SCANNER
Scanner query = new Scanner(System.in);
var busca = "";
// CRIANDO NOSSO OBJETO GSON PARA SERIALIZAÇÃO E DESSERIALIZAÇÃO
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).setPrettyPrinting().create();
do {
try {
System.out.println("Digite o filme que você deseja buscar: ");
// BUSCANDO E ENCODANDO A NOSSA BUSCA PARA ESTAR DE ACORDO COM OS PADROES DO NAVEGADOR
busca = query.nextLine();
if(busca.equalsIgnoreCase("sair")) {
break;
}
String endereco = "https://www.omdbapi.com/?t=" + Encoder.EncodeString(busca) + "&apikey="+API;
TituloOmdb meuFilmeOmdb = gson.fromJson(RequestHttp.CreateRequest(endereco), TituloOmdb.class);
Titulo meuTitulo = new Titulo(meuFilmeOmdb);
System.out.println(meuTitulo);
meusFilmes.add(meuTitulo);
} catch (NumberFormatException e) {
System.out.println("Erro na formataçåo de um número");
System.out.println(e.getMessage());
break;
} catch (ErroDeFormatacao e) {
System.out.println(e.getMessage());
break;
} catch (IllegalArgumentException e) {
System.out.println("Problema com a url, corrija ela!");
System.out.println(e.getMessage());
break;
}
}
while(!busca.equalsIgnoreCase("sair"));
FileWriter escrita = new FileWriter("filmes.json");
escrita.write(gson.toJson(meusFilmes));
escrita.close();
}
}
Codigo de algumas classes com metodos estaticos que eu criei pra tentar delegar outras funções, tentei enxugar o máximo possível, mas voltarei nesse codigo daqui uns meses pra rever.
package br.com.alura.screenmatch.Static;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class Encoder {
public static String EncodeString(String query) {
return URLEncoder.encode(query, StandardCharsets.UTF_8);
}
}
package br.com.alura.screenmatch.Static;
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 RequestHttp {
private String json;
public static String CreateRequest(String endereco) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(endereco))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
String json = response.body();
return json;
}
}