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

Lidando com exceptions

public class PrincipalComBusca {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
        System.out.println("Digite um filme para busca: ");

               var busca = leitura.nextLine();

        String endereco = "https://www.omdbapi.com/?t="
                + busca.replace(" ", "+") + "&apikey=3b2098f9";
        try {
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(endereco))
                    .build();

            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
            String jason = response.body();
            System.out.println(jason);
         
            Gson gson = new GsonBuilder()
                    .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                    .create();

            TituloOmdb meuTituloOmdb = gson.fromJson(jason, TituloOmdb.class);

            System.out.println("Titulo: " + meuTituloOmdb);
           
            Titulo meuTitulo = new Titulo(meuTituloOmdb);
            System.out.println("Titulo já convertido");
            System.out.println(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");
            System.out.println("Programa finalizado");

        }catch (ErroDeConversaoDeAnoException e){
            System.out.println(e.getMessage());
        }
    }
}

public class Titulo implements Comparable<Titulo> {
   // @SerializedName("Title")
    private String nome;
  //  @SerializedName("Year")
    private int anoDeLancamento;
    private   boolean incluidoNoPlano;
    private  double somaDasAvaliacoes;
    private int totalDeAvaliacao;
    private int duracaoEmMinutos;

    public Titulo(String nome, int anoDeLancamento) {
        this.nome = nome;
        this.anoDeLancamento = anoDeLancamento;
    }

    public Titulo(TituloOmdb meuTituloOmdb) {
        this.nome = meuTituloOmdb.title();
        if(meuTituloOmdb.year().length() > 4) {
            throw new ErroDeConversaoDeAnoException("Não consegui converter o ano " +
                    "porque tem mais de 04 caracteres.");
        }
        this.anoDeLancamento = Integer.valueOf(meuTituloOmdb.year());
        this.duracaoEmMinutos = Integer.valueOf(meuTituloOmdb.runtime().substring(0,2));
    }

    public int getTotalDeAvaliacao() {
        return totalDeAvaliacao;
    }
    public String getNome() {
        return nome;
    }
    public int getAnoDeLancamento() {
        return anoDeLancamento;
    }
    public boolean IncluidoNoPlano() {
        return incluidoNoPlano;
    }
    public int getDuracaoEmMinutos() {
        return duracaoEmMinutos;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public void setAnoDeLancamento(int anoDeLancamento) {
        this.anoDeLancamento = anoDeLancamento;
    }
    public void setIncluidoNoPlano(boolean incluidoNoPlano) {
        this.incluidoNoPlano = incluidoNoPlano;
    }
    public void setDuracaoEmMinutos(int duracaoEmMinutos) {
        this.duracaoEmMinutos = duracaoEmMinutos;

    }
    public void exibeFichaTecnica(){
        System.out.println("Nome do Filme/Série: " + nome);
        System.out.println("Ano de Lancamento: " + anoDeLancamento);
        System.out.println("Filme incluído no seu Plano!");
    }
    public void avalia(double nota){
        somaDasAvaliacoes += nota;
        totalDeAvaliacao++;
    }
    public double pegaMedia(){
        return  somaDasAvaliacoes / totalDeAvaliacao;
       
    }

    @Override
    public int compareTo(Titulo outroTitulo) {
        return this.getNome().compareTo(outroTitulo.getNome());
    }

    @Override
    public String toString() {
        return "Nome: '" + nome + '\'' +
                ", Ano de Lancamento: " + anoDeLancamento +
                '}' + "Duracçao: " + duracaoEmMinutos;
    }
}
    
public class ErroDeConversaoDeAnoException extends RuntimeException{
    private String mensagem;
    public ErroDeConversaoDeAnoException(String mensagem) {
        this.mensagem = mensagem;
    }

    @Override
    public String getMessage() {
        return this.mensagem;
    }
}
1 resposta
solução!

Olá, tudo bem?

Seu código está bem organizado e estruturado, com uma classe principal que faz a solicitação à API e converte a resposta em um objeto do tipo Titulo. Também há uma classe Titulo que representa as informações do filme e uma exceção personalizada ErroDeConversaoDeAnoException para tratar erros de conversão de ano.

Continue trabalhando nesse projeto e aprimorando suas habilidades de programação.

Um abraço e bons estudos.