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

Haga lo que hicimos en aula

Creé una excepción personalizada para controlar errores en la conversión.

ErrorEnConversionDeDuracionException.java

package com.alura.screenmatch.excepcion;

public class ErrorEnConversionDeDuracionException extends RuntimeException {

    private String mensaje;

    public ErrorEnConversionDeDuracionException(String mensaje) {
        this.mensaje = mensaje;
    }

    @Override
    public String getMessage() {
        return this.mensaje;
    }
}

Titulo.java

public Titulo(TituloOmdb miTituloOmdb) {
    this.nombre = miTituloOmdb.title();
    this.fechaDeLanzamiento = Integer.valueOf(miTituloOmdb.year());

    if (miTituloOmdb.runtime().contains("N/A")) {
        throw new ErrorEnConversionDeDuracionException(
                "No pude convertir la duracion, porque contiene un N/A"
        );
    }

    this.duracionEnMinutos = Integer.valueOf(
            miTituloOmdb.runtime().substring(0,3).replace(" ", "")
    );
}

PrincipalConBusqueda.java

package com.alura.screenmatch.principal;

import com.alura.screenmatch.modelos.Titulo;
import com.alura.screenmatch.modelos.TituloOmdb;
import com.alura.screenmatch.excepcion.ErrorEnConversionDeDuracionException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.FieldNamingPolicy;

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 PrincipalConBusqueda {

    public static void main(String[] args) throws IOException, InterruptedException {

        Scanner lectura = new Scanner(System.in);
        System.out.println("Escriba el nombre de una pelicula: ");
        var busqueda = lectura.nextLine();

        String direccion = "https://www.omdbapi.com/?t=" +
                busqueda.replace(" ", "+") +
                "&apikey=ffedabb6";

        try {
            HttpClient client = HttpClient.newHttpClient();

            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(direccion))
                    .build();

            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());

            String json = response.body();
            System.out.println(json);

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

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

            Titulo miTitulo = new Titulo(miTituloOmdb);
            System.out.println("Titulo ya convertido: " + miTitulo);

        } catch (NumberFormatException e) {
            System.out.println("Ocurrió un error: ");
            System.out.println(e.getMessage());

        } catch (IllegalArgumentException e) {
            System.out.println("Error en la URI, verifique la dirección.");

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

        System.out.println("Finalizó la ejecución del programa!");
    }
}
1 respuesta

¡Hola Estudiante, espero que estés bien!

Parece que has seguido correctamente los pasos de la actividad para crear una excepción personalizada y manejar errores al consumir la API de OMDb. Tu código está bien estructurado y parece estar alineado con lo que se hizo en la clase.

Sin embargo, aquí hay algunos puntos que podrías revisar o considerar:

  1. Validación de la duración: Asegúrate de que el método substring(0,3) en la conversión de la duración sea adecuado para todos los casos. Si el formato de duración es diferente, podría causar un StringIndexOutOfBoundsException. Podrías agregar una validación adicional para manejar esto.

  2. Manejo de errores adicionales: Además de las excepciones que ya estás manejando, considera la posibilidad de que la respuesta de la API no sea la esperada (por ejemplo, un error 404 o un formato JSON no válido). Podrías agregar un manejo de excepciones para IOException y JsonSyntaxException de Gson.

  3. Mejora de mensajes de error: Asegúrate de que los mensajes de error sean claros y útiles para el usuario final. Esto puede ayudar a depurar problemas más rápidamente.

  4. Pruebas con diferentes entradas: Prueba tu aplicación con diferentes nombres de películas, incluyendo aquellos con caracteres especiales o espacios, para asegurarte de que todo funcione correctamente.

Espero que estas sugerencias te sean útiles. ¡Espero haber ayudado y buenos estudios!