0
respostas

[Faça como eu fiz] Gerar Arquivo JSON

Agora é com você! Faça o mesmo procedimento que eu fiz na aula, escrevendo a sua lista de filmes em json.


Neste desafio, busquei segregar em classes distintas:


package exceptions;

public class ErroBuscaFilmeException extends RuntimeException {

        public ErroBuscaFilmeException(String msg) {
            super(msg);
    }
}

package Entities;

public class Filme {
    private String nomeFilme;
    private Integer anoDeLancamento;
    private Integer duracaoEmMinutos;

    @Override
    public String toString() {
        return "(nome = " + nomeFilme +
                ", anoDeLancamento = " + anoDeLancamento +
                ", duração(em minutos) = " + duracaoEmMinutos + ")";
    }

    public String getNomeFilme() {
        return nomeFilme;
    }

    public void setNomeFilme(String nomeFilme) {
        this.nomeFilme = nomeFilme;
    }

    public Integer getAnoDeLancamento() {
        return anoDeLancamento;
    }

    public void setAnoDeLancamento(Integer anoDeLancamento) {
        this.anoDeLancamento = anoDeLancamento;
    }

    public Integer getDuracaoEmMinutos() {
        return duracaoEmMinutos;
    }

    public void setDuracaoEmMinutos(Integer duracaoEmMinutos) {
        this.duracaoEmMinutos = duracaoEmMinutos;
    }
}

package Entities;

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

public class AccessOmdb extends Filme {
    public AccessOmdb(String filme) throws IOException, InterruptedException {

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

        String endereco = "http://www.omdbapi.com/?t=" + filme.replace(" ", "+") + "&apikey=2669****";
        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();
        System.out.println(json);

        Filme meuFilme = gson.fromJson(json, Filme.class);
        System.out.println(meuFilme);

        FileWriter escrita = new FileWriter("filmes.json");
        escrita.write(gson.toJson(json));
        escrita.close();
        System.out.println("O programa finalizou corretamente");
    }
}

package Entities;

public record FilmeOmdb(String nomeFilme, String anoDeLancamento, String duracaoEmMinutos) {

}

package Main;

import Entities.AccessOmdb;
import java.util.Scanner;

public class Principal {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);

        AccessOmdb filme = new AccessOmdb("");
        System.out.println("Insira o nome do filme: ");
        filme.setNomeFilme(sc.nextLine());
        try {
            AccessOmdb localizaFilme = new AccessOmdb(filme.getNomeFilme());
        } catch (RuntimeException e) {
            System.out.println("Ocorreu erro na consulta!");
            System.out.println(e.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        sc.close();
    }
}

Gerado o arquivo JSON e as informações são salvas no arquivo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade


Porém ocorre alguns erros anterior a geração do arquivo e em seguida é retornado o Nome do Filme, mas na apresentação das informações do Record, elas retornam vazias.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade