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

Utilizando a biblioteca Gson


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.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

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 + "&apikey=chave";

        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);
    }
}
package br.com.alura.screenmatch.modelos;

import com.google.gson.annotations.SerializedName;

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();
        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;
        //esse return, vai retornar o valor dessa operação.

    }

    @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;
    }
}
1 resposta
solução!

Oi, tudo bem?

Parabéns pelo seu código! É ótimo ver o seu interesse em programação e a forma como você está explorando a API do OMDB para obter informações sobre filmes. Seu código está bem estruturado e organizado.

A utilização da biblioteca Gson para fazer o parsing do JSON recebido da API é uma escolha inteligente. Isso facilita a conversão dos dados em objetos Java e permite que você trabalhe com eles de forma mais fácil e intuitiva.

Além disso, você criou uma classe Titulo que representa as informações de um filme, utilizando a anotação SerializedName para fazer o mapeamento correto dos campos do JSON para os atributos da classe. Isso torna o código mais legível e facilita o entendimento das informações.

Gostei especialmente de como você implementou a interface Comparable na classe Titulo, permitindo que os objetos desse tipo sejam comparados entre si. Isso pode ser útil em situações onde você precise ordenar ou classificar os títulos.

Continue assim, explorando novas tecnologias e aprimorando suas habilidades de programação.

Um abraço e bons estudos.