Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

Api no responde

Hola buenas noches, a alguien le paso que cuando consultaba la api en postman le daba la respuesta pero cuando lo intento hacer en el codigo le devolvio un 301? el 301 siginifica que ya esa URL no esta haciendo utilizada y que esta siendo redirigido a otra URL, la verdad no se siera un error de mi codigo aunque revise el de la clase y pues estaban parecidos y es mas copie y pegue el de la clase y tampoco me funciono. Igual forma busque una solucion y asi fue que pude.

import com.google.gson.Gson;

import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse;

public class StarWarsApi { public FilmsRecord searchFilm(int numberFilm) { URI uri = URI.create("https://swapi.py4e.com/api/films/" + numberFilm); HttpClient client = HttpClient.newBuilder() .followRedirects(HttpClient.Redirect.NORMAL) .build(); HttpRequest request = HttpRequest.newBuilder() .uri(uri) .build();

  try {
    HttpResponse<String> response = client
      .send(request, HttpResponse.BodyHandlers.ofString());
    return new Gson().fromJson(response.body(), FilmsRecord.class);
  } catch (Exception e) {
    throw new RuntimeException("I didn't find that film.");
  }

} }

No se si algun profesor pueda analizar el codigo para saber si de esta forma esta bien, a veces las cosas funcionan pero no es el mejor codigo.

2 respuestas
solución!

¡Hola Jesús, espero que estés bien!

Creo que es una buena opción para resolver el problema. Además, te recomendaría también verificar si la URL de la API ha cambiado o si hay alguna configuración adicional que debas tener en cuenta al realizar la solicitud.

Comprobamos el problema y para ayudar a usted y a otros colegas que tienen el mismo problema, dejamos una nueva actividad en el curso para ayudar antes de dar los próximos pasos en el curso: https://app.aluracursos.com/course/java-consumir-api-escribir-archivos-manejar-errores/task/87717

Espero que estos consejos te ayuden a solucionar el problema. Si necesitas más ayuda, no dudes en preguntar. ¡Buena suerte con tu proyecto!

Espero haber ayudado y buenos estudios!

Hola Jesus, cordial saludo. Replique tú código, y me funciona bien. De paso, adjunto el cógido de las clases.

Clase StarWarsApi

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 StarWarsApi {
    public FilmsRecord searchFilm(int numberFilm) {
        URI uri = URI.create("https://swapi.py4e.com/api/films/" + numberFilm);
        HttpClient client = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.NORMAL).build();
        HttpRequest request = HttpRequest.newBuilder().uri(uri).build();

        try {
            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
            return new Gson().fromJson(response.body(), FilmsRecord.class);
        } catch (Exception e) {
            throw new RuntimeException("I didn't find that film.");
        }
    }
}

Clase FilmsRecord

public record FilmsRecord (String title,
                           int episode_id,
                           String director,
                           String release_date) {}

Cómo comentario, que me pareció algo raro, pero igual funciona, es cómo declaras el objeto client, en mi caso, al igual cómo se uso en las clases dadas en Alura, uso es:

HttpClient client = HttpClient.newHttpClient();

En lugar de:

HttpClient client = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.NORMAL).build();

Pero cómo te digo ambas funcionan.

IPor último, te dejo una imagen ejecutando el programa