Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Proyecto final

El modelo de datos (Record)

public record Pelicula(String title, 
                       int episode_id, 
                       String opening_crawl, 
                       String director) {
}

Clase de Consulta

import com.google.gson.Gson;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class ConsultaPelicula {
    public Pelicula buscarPelicula(int numeroDePelicula) {
        URI direccion = URI.create("https://swapi.dev/api/films/" + numeroDePelicula + "/");

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(direccion)
                .build();

        try {
            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
            return new Gson().fromJson(response.body(), Pelicula.class);
        } catch (Exception e) {
            throw new RuntimeException("No encontré esa película.");
        }
    }
}

Clase para Generar el Archivo

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;

public class GeneradorDeArchivo {
    public void guardarJson(Pelicula pelicula) throws IOException {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        FileWriter escritura = new FileWriter(pelicula.title() + ".json");
        escritura.write(gson.toJson(pelicula));
        escritura.close();
    }
}

Clase Principal con el Menú

import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        Scanner lectura = new Scanner(System.in);
        ConsultaPelicula consulta = new ConsultaPelicula();

        System.out.println("Escriba el número de la película de Star Wars que desea consultar (1-6):");
        try {
            var numeroDePelicula = Integer.valueOf(lectura.nextLine());
            Pelicula pelicula = consulta.buscarPelicula(numeroDePelicula);
            System.out.println(pelicula);
            
            GeneradorDeArchivo generador = new GeneradorDeArchivo();
            generador.guardarJson(pelicula);
            System.out.println("Archivo generado correctamente.");
            
        } catch (NumberFormatException e) {
            System.out.println("Número no encontrado: " + e.getMessage());
        } catch (RuntimeException | IOException e) {
            System.out.println(e.getMessage());
            System.out.println("Finalizando la aplicación.");
        }
    }
}
1 respuesta

¡Hola Mario, espero que estés bien!

Tu proyecto parece estar bien encaminado. Has implementado correctamente el uso de HttpClient para consumir la API de Star Wars y estás utilizando Gson para manejar la conversión de JSON a objetos Java y viceversa. Además, el manejo de excepciones está bien pensado para capturar errores comunes.

Aquí hay algunas sugerencias que podrían ayudarte a mejorar o verificar tu código:

  1. Validación de Entrada: Asegúrate de que el número de película ingresado esté dentro del rango permitido (1-6). Podrías agregar una verificación antes de realizar la consulta a la API para evitar posibles errores.

    if (numeroDePelicula < 1 || numeroDePelicula > 6) {
        System.out.println("Por favor, ingrese un número entre 1 y 6.");
        return;
    }
    
  2. Manejo de Excepciones: Actualmente, cualquier excepción en buscarPelicula lanza un RuntimeException con el mensaje "No encontré esa película." Considera proporcionar mensajes más específicos dependiendo del tipo de error para facilitar la depuración.

  3. Cierre de Recursos: Aunque estás cerrando el FileWriter correctamente, también podrías considerar usar un bloque try-with-resources para gestionar automáticamente el cierre de recursos.

    try (FileWriter escritura = new FileWriter(pelicula.title() + ".json")) {
        escritura.write(gson.toJson(pelicula));
    }
    
  4. Formato de Salida: Si deseas que la salida del objeto Pelicula en la consola sea más legible, podrías sobrescribir el método toString en el record Pelicula para personalizar la representación de la cadena.

Estas son algunas ideas para mejorar tu proyecto. Espero que te sean útiles y te ayuden a avanzar en tu desafío. ¡Espero haber ayudado y buenos estudios!