Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Crie outra class somente para requisição

Afim de desentralizar o codigo crie outra class somente para requisição, primeiramente a class main:

package br.com.alura.screenmatch.principal;
import br.com.alura.screenmatch.excecao.ErrorDeConversaoDeAnoException;
import br.com.alura.screenmatch.modelos.Requisicao;
import br.com.alura.screenmatch.modelos.Titulo;
import br.com.alura.screenmatch.modelos.TituloOmdb;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URI;
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 leitura = new Scanner(System.in);
        String busca = "";
        List<Titulo> listaDeTitulos = new ArrayList<>();

        Gson gson = new GsonBuilder()
                //traduz campos caso seja maiusculo no json
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                //deixando mais bonito no arquivo json
                .setPrettyPrinting()
                .create();

        while (!busca.equalsIgnoreCase("busca") ) {

            System.out.println("Digite um filme para busca: ");
            busca = leitura.nextLine();

            if(busca.equalsIgnoreCase("sair")){
                break;
            }

            String endereco = "https://www.omdbapi.com/?apikey=e41ea21c&t=" + busca;
            try {
                //Aplicando a nova class
                Requisicao requisicao = new Requisicao(endereco);
                String json = requisicao.buscaRetornaRequisicao(endereco);

                //Imprimindo json
                System.out.println(json);

                //Titulo meuTitulo = gson.fromJson(json, Titulo.class);
                TituloOmdb meuTituloOmdb = gson.fromJson(json, TituloOmdb.class);

                //Tranferindo de class meu tituloomdb para TItulo - necessario criar um construtor
                Titulo meuTitulo = new Titulo(meuTituloOmdb);
                System.out.println(meuTituloOmdb);

                listaDeTitulos.add(meuTitulo);

                //titulo convertido - imprimindo
                System.out.println(meuTitulo);
            } catch (NumberFormatException e) {
                System.out.println("error" + e.getMessage());
            } catch (IllegalArgumentException e) {
                System.out.println("Erro" + e.getMessage());
            } catch (ErrorDeConversaoDeAnoException e) {
                System.out.println(e.getMessagem());
            } finally {
                System.out.println("the end");
            }
        }

        System.out.println(listaDeTitulos);

        //Classe para gravação de arquivos
        FileWriter escrita = new FileWriter("filmes.json"); // neste caso temos que usar GSON
        escrita.write(gson.toJson(listaDeTitulos)); // gravando arquivos
        escrita.close(); // terminar de escrever no arquivo


    }

}

Nova Class de requisição:

package br.com.alura.screenmatch.modelos;

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 Requisicao {
    //atributos
    private String endereco;
    
    //Construtor
    public Requisicao(String endereco) {
        this.endereco = endereco;

    }
    
    //Metodo para buscar e retornar a requisição
    public String buscaRetornaRequisicao(String url) throws IOException, InterruptedException {

        //Requisição
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .build();

        //Resposta
        HttpResponse<String> response = client
                .send(request, HttpResponse.BodyHandlers.ofString());

        return response.body();
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

}
1 resposta
solução!

Oii José, tudo bem?

Parabéns pela iniciativa de refatorar seu código criando uma classe separada para lidar com as requisições! Essa abordagem não só melhora a organização do código, mas também facilita a manutenção e a expansão futura.

Continue assim.

Um abraço e bons estudos.