Depois de assistir aos vídeos do desafio, acho que consegui entender como separar as requisições em classes.
Gostaria de um feedback com críticas e sugestões, segue o código das classes que foram criadas:
Classe para criar uma requisição ao Omdb:
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
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 Requisicoes {
public TituloOmdb pesquisaFilme(String nomeDoFilme) {
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.create();
try {
String endereco = "http://www.omdbapi.com/?t=" + nomeDoFilme + "&apikey=26b12326";
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();
TituloOmdb tituloOmdb = gson.fromJson(json, TituloOmdb.class);
return tituloOmdb;
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
}
}
Classe para converter o arquivo para json:
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.util.List;
public class GeradorDeJson {
public void gerarJson(List titulos) throws IOException {
Gson gson = new GsonBuilder().
setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.create();
FileWriter escrita = new FileWriter("filmes.json");
escrita.write(gson.toJson(titulos));
escrita.close();
}
}
Classe Main:
import br.com.yuri.screenmatch.modelos.GeradorDeJson;
import br.com.yuri.screenmatch.modelos.Requisicoes;
import br.com.yuri.screenmatch.modelos.Titulo;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class PrincipalComBusca {
public static void main(String[] args) throws IOException, InterruptedException {
Scanner sc = new Scanner(System.in);
String nomeDoFilme = "";
List<Titulo> lista = new ArrayList<>();
while (!nomeDoFilme.equalsIgnoreCase("sair")) {
System.out.println("Qual filme gostaria de buscar? (Digite sair para sair)");
nomeDoFilme = sc.nextLine();
if (nomeDoFilme.equalsIgnoreCase("sair")) {
break;
}
try {
Requisicoes requisicao = new Requisicoes();
//instanciando um Titulo a partir de um TituloOmdb
Titulo meuTitulo = new Titulo(requisicao.pesquisaFilme(nomeDoFilme));
lista.add(meuTitulo);
} catch (NumberFormatException e) {
System.out.println("Aconteceu um erro");
System.out.println(e.getMessage());
} catch (IllegalArgumentException e) {
System.out.println("Algum erro de argumento na busca, verifique o endereço");
}
}
GeradorDeJson novoGerador = new GeradorDeJson();
novoGerador.gerarJson(lista);
}
}