Dejo mi propuesta, escucho puntos de mejora.
package com.alura.screenmatch.principal;
import com.alura.screenmatch.modelos.DatosPeliculaStarWars;
import com.alura.screenmatch.modelos.PeliculaStarWars;
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;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class PrincipalStarWars {
private final String baseUrl = "https://swapi.py4e.com/api/films/";
public void datosPelicula() throws IOException, InterruptedException {
Scanner busqueda = new Scanner(System.in);
int opcionElegida=0;
String menu= """
********************
1. Busqueda de Pelicula
2. Salir
""";
List<PeliculaStarWars> listaDePeliculas = new ArrayList<>();
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
while (opcionElegida != 2) {
try {
System.out.println(menu);
System.out.println("Por favor ingrese una opción: ");
opcionElegida = busqueda.nextInt();
busqueda.nextLine();
if (opcionElegida!=1&&opcionElegida!=2){
System.out.println("Opción inválida, intente nuevamente\n");
System.out.println(menu);
System.out.println("Por favor ingrese una opción: ");
opcionElegida = busqueda.nextInt();
busqueda.nextLine();
}
if (opcionElegida == 1) {
int numeroPelicula=0;
boolean validacion=false;
while (!validacion) {
System.out.println("Por favor ingrese el # de película: ");
if (busqueda.hasNextInt()) {
numeroPelicula = busqueda.nextInt();
validacion= true;
} else {
System.out.println("Por favor ingrese un número válido.");
busqueda.nextLine();
}
}
String direccion = baseUrl + numeroPelicula + "/";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(direccion))
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
int codigo = response.statusCode();
if (codigo == 404) { // URL no encontrada
System.out.println("Dirección de URL no encontrada. Código de estado: 404");
break;
}
String json = response.body();
DatosPeliculaStarWars datosPeliculaStarWars = gson
.fromJson(json, DatosPeliculaStarWars.class);
PeliculaStarWars peliculaStarWars = new PeliculaStarWars(datosPeliculaStarWars);
System.out.println(peliculaStarWars);
System.out.println("");
listaDePeliculas.add(peliculaStarWars);
}
}catch (InputMismatchException e) {
System.out.println("Opción inválida, intente nuevamente");
busqueda.nextLine();
}
}
System.out.println(listaDePeliculas);
FileWriter escritura =new FileWriter("Películas Star Wars.json");
escritura.write(gson.toJson(listaDePeliculas));
escritura.close();
System.out.println("Cerrando aplicación...");
}
}