Primero, nos aseguramos de que la carpeta src tenga la estructura de carpetas com/alura/screenmatch/excepcion. Dentro, creamos el archivo:
ErrorEnConversionDeDuracionException.java:
package com.alura.screenmatch.excepcion;
// Heredamos de RuntimeException para que sea una excepción que no obligue
// a usar try-catch en todos lados, pero que podamos capturar si queremos.
public class ErrorEnConversionDeDuracionException extends RuntimeException {
private String mensaje;
public ErrorEnConversionDeDuracionException(String mensaje) {
this.mensaje = mensaje;
}
@Override
public String getMessage() {
return this.mensaje;
}
}
En la clase Titulo, modificamos el constructor que recibe el TituloOmdb:
// Dentro de la clase Titulo.java
public Titulo(TituloOmdb miTituloOmdb) {
this.nombre = miTituloOmdb.title();
// Validación de la fecha
this.fechaDeLanzamiento = Integer.valueOf(miTituloOmdb.year());
// Validación de la duración: OMDb a veces envía "N/A" si no conoce el dato
if (miTituloOmdb.runtime().contains("N/A")) {
throw new ErrorEnConversionDeDuracionException("No pude convertir la duración porque contiene un N/A");
}
// Si no es N/A, limpiamos el texto (ejemplo: "120 min" -> "120") y convertimos a int
this.duracionEnMinutos = Integer.valueOf(
miTituloOmdb.runtime().substring(0, 3).replace(" ", "")
);
}
Ahora, integramos todo en la clase principal:
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 película: ");
var busqueda = lectura.nextLine();
// Usamos tu clave: a9f38ea0 y reemplazamos espacios por "+"
String direccion = "https://www.omdbapi.com/?t=" +
busqueda.replace(" ", "+") +
"&apikey=a9f38ea0";
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 recibido: " + json);
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
TituloOmdb miTituloOmdb = gson.fromJson(json, TituloOmdb.class);
Titulo miTitulo = new Titulo(miTituloOmdb);
System.out.println("Título ya convertido: " + miTitulo);
} catch (NumberFormatException e) {
System.out.println("Ocurrió un error de formato numérico: " + e.getMessage());
} catch (IllegalArgumentException e) {
System.out.println("Error en la URI, verifique la dirección.");
} catch (ErrorEnConversionDeDuracionException e) {
// Aquí capturamos nuestra propia excepción personalizada
System.out.println(e.getMessage());
} catch (Exception e) {
// Catch genérico al final por si ocurre algo inesperado
System.out.println("Ocurrió un error inesperado.");
}
System.out.println("¡Finalizó la ejecución del programa!");
}
}