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

Haz como yo hice

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

public class Titulo implements Comparable{

private String nombre;
private int fechaDeLanzamiento;
private int duracionEnMinutos;

public Titulo(TituloOmdb miTituloOmdb) {
    this.nombre = miTituloOmdb.title();
    this.fechaDeLanzamiento = Integer.valueOf(miTituloOmdb.year());
    this.duracionEnMinutos = Integer.valueOf(miTituloOmdb.runtime().replace(" min",""));
}

public String getNombre() {
    return nombre;
}

public int getFechaDeLanzamiento() {
    return fechaDeLanzamiento;
}

public int getDuracionEnMinutos() {
    return duracionEnMinutos;
}

@Override
public int compareTo(Titulo otroTitulo) {
    return this.nombre.compareTo(otroTitulo.nombre);
}

@Override
public String toString() {
    return "Película: " + nombre +
            " | Año: " + fechaDeLanzamiento +
            " | Duración: " + duracionEnMinutos + " minutos";
}

}

public class PrincipalConBusqueda {

public static void main(String[] args) {

    Scanner lectura = new Scanner(System.in);

    System.out.println("Escriba el nombre de una pelicula:");
    String busqueda = lectura.nextLine();

    // JSON ficticio simulando respuesta de OMDb
    String json = """
    {
       "Title":"Titanic",
       "Year":"1997",
       "Runtime":"195 min"
    }
    """;

    System.out.println("Respuesta simulada de la API:");
    System.out.println(json);

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

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

    System.out.println("Datos convertidos a record:");
    System.out.println(miTituloOmdb);

    Titulo miTitulo = new Titulo(miTituloOmdb);

    System.out.println("Objeto final de la aplicación:");
    System.out.println(miTitulo);
}

}

1 respuesta

¡Hola David, espero que estés bien!

Parece que estás trabajando en un proyecto donde necesitas consumir una API y convertir la respuesta JSON en objetos Java utilizando la biblioteca Gson. Por lo que veo, ya tienes un buen progreso y tu código está casi completo. Sin embargo, hay algunos puntos que podrías revisar para asegurarte de que todo funcione correctamente.

  1. Asegúrate de que Gson esté correctamente añadido al proyecto: Si estás usando IntelliJ, sigue los pasos que se describen en el contexto para añadir la biblioteca Gson a tu proyecto. Esto es crucial para que el código funcione sin problemas.

  2. Revisar el procesamiento de la duración: En tu clase Titulo, estás usando miTituloOmdb.runtime().replace(" min","") para convertir la duración de String a un entero. Esto está bien si el formato siempre es consistente. Sin embargo, en el contexto de la actividad, se sugiere usar substring(0,2), lo cual puede no ser adecuado si la duración tiene más de dos dígitos. Asegúrate de que el método que uses maneje todos los casos posibles.

  3. Uso de @SerializedName: Aunque no es obligatorio en todos los casos, usar @SerializedName en la clase Titulo puede ayudar a mapear los campos JSON a los atributos de la clase si los nombres no coinciden exactamente. Esto puede ser útil si decides cambiar los nombres de los atributos en el futuro.

  4. Verificación de errores: Asegúrate de manejar posibles excepciones que puedan surgir al convertir JSON a objetos Java, especialmente si el JSON no tiene el formato esperado.

Aquí tienes un ejemplo de cómo podrías ajustar el manejo de la duración:

public Titulo(TituloOmdb miTituloOmdb) {
    this.nombre = miTituloOmdb.title();
    this.fechaDeLanzamiento = Integer.valueOf(miTituloOmdb.year());
    try {
        this.duracionEnMinutos = Integer.valueOf(miTituloOmdb.runtime().replace(" min", ""));
    } catch (NumberFormatException e) {
        System.err.println("Error al convertir la duración: " + e.getMessage());
        this.duracionEnMinutos = 0; // Valor por defecto en caso de error
    }
}

Espero que estas sugerencias te ayuden a avanzar en tu proyecto. ¡Bons estudios!