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

Faça como eu fiz: utilizando a biblioteca Gson

Segue a resolução do exercício:

Record TituloOmdb:

package br.com.alura.screenmatch.modelos;

public record TituloOmdb(String title, String year, String runtime) {
}

Classe Título:

package br.com.alura.screenmatch.modelos;

import br.com.alura.screenmatch.calculos.Classificavel;

public class Titulo implements Comparable<Titulo>{
    private String nome;
    private int anoDeLancamento;
    private int duracaoEmMinutos;
    private boolean incluidoNoPlano;
    private double somaDasAvaliacoes;
    private int totalDeAvaliacoes;

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

    public Titulo(TituloOmdb tituloOmdb) {
        this.nome = tituloOmdb.title();
        this.anoDeLancamento = Integer.parseInt(tituloOmdb.year().
                replace("-", ""));
        this.duracaoEmMinutos = Integer.parseInt(tituloOmdb.runtime().
                replace(" min", ""));
    }

    // Getters and Setters

    public double pegaMedia() {
        if (totalDeAvaliacoes != 0) {
            return somaDasAvaliacoes/totalDeAvaliacoes;
        } else {
            return 0.0;
        }
    }

    public void avalia(double avaliacao){
        somaDasAvaliacoes += avaliacao;
        totalDeAvaliacoes++;
    }

    @Override
    public String toString() {
        return  "[" + this.getNome() + " (" + this.getAnoDeLancamento() + ")" +
                ", duração: " + this.getDuracaoEmMinutos() + " minutos]";
    }


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

Classe ConsultaAPI:

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 ConsultaAPI {
    public String consultaAPI(String url) throws IOException, InterruptedException {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url)).build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        return response.body();
    }
}

Classe PrincipalComBusca:

package br.com.alura.screenmatch.principal;

import br.com.alura.screenmatch.modelos.ConsultaAPI;
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.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class PrincipalComBusca {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner sc = new Scanner(System.in);
        System.out.println("Digite o nome do filme: ");
        String nomeFilme = sc.nextLine();
        String nomeFilmeCodificado = URLEncoder.encode(nomeFilme, StandardCharsets.UTF_8);

        String OMDB_API_KEY = "api_key_pessoal";
        String endereco = "https://www.omdbapi.com/?t=" + nomeFilmeCodificado + "&apikey=" + OMDB_API_KEY;

        ConsultaAPI consulta = new ConsultaAPI();
        consulta.consultaAPI(endereco);
        System.out.println(consulta.consultaAPI(endereco));

        String json =  consulta.consultaAPI(endereco);

        Gson  gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .create();

        TituloOmdb tituloOmdb = gson.fromJson(json, TituloOmdb.class);
        System.out.println(tituloOmdb);

        Titulo meuTitulo = new Titulo(tituloOmdb);
        System.out.println(meuTitulo);

        sc.close();
    }
}

Output:

Digite o nome do filme: 
matrix
Json de retorno da API: {"Title":"Matrix","Year":"1993",...,"Runtime":"60 min",...}
TítuloOmdb: TituloOmdb[title=Matrix, year=1993, runtime=60 min]
Título convertido: [Matrix (1993), duração: 60 minutos]

Process finished with exit code 0
1 resposta
solução!

Oi, Raoni! Como vai?

Agradeço por compartilhar.

Gostei da sua análise, principalmente quando você mostrou a conversão do JSON da API usando a biblioteca Gson e a adaptação dos dados do record para a classe de domínio, deixando o código organizado e fácil de entender.

Seu cuidado com a codificação da URL e com a estrutura das classes mostra uma boa compreensão do fluxo da aplicação. Continue explorando boas práticas como essa, pois elas ajudam muito na manutenção e evolução do código.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!