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

Lo que hicimos en clase

**Screenmactch.**

import com.aluracursos.screenmactch.model.DatosSerie;
import com.aluracursos.screenmactch.service.ConsumoAPI;
import com.aluracursos.screenmactch.service.ConvierteDatos;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ScreenmactchApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(ScreenmactchApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        var consumoApi = new ConsumoAPI();
        var json = consumoApi.obtenerDatos("https://www.omdbapi.com/?t=game+of+thrones&apikey=adf4c8b5");
        System.out.println(json);
        ConvierteDatos conversor = new ConvierteDatos();
        var datos = conversor.obtenerDatos(json, DatosSerie.class);
        System.out.println(datos);
    }
}

**DatosSerie.**

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)

public record DatosSerie(

        @JsonAlias("Title") String titulo,

        @JsonAlias("totalSeasons") Integer totalDeTemporadas,

        @JsonAlias("imdbRating") String evaluacion) {
}

**ConvierteDatos **

import com.aluracursos.screenmactch.model.DatosSerie;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ConvierteDatos implements IConvierteDatos {

    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public <T> T obtenerDatos(String json, Class<T> clase) {
        try {
            return objectMapper.readValue(json,clase);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

**IConvierteDatos **

public interface IConvierteDatos {

    <T> T obtenerDatos(String json, Class<T> clase);
}

**ConsumoAPI**

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

    public String obtenerDatos(String url) {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .build();
        HttpResponse<String> response = null;
        try {
            response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        String json = response.body();
        return json;
    }
}
1 respuesta

Hola Estudiante, ¡qué gusto verte por aquí!

Parece que estás trabajando en un proyecto para consumir una API y modelar los datos de una serie, similar a lo que hicieron en clase. A partir del código que compartiste, veo que ya tienes una estructura bastante sólida. Aquí te dejo algunos puntos que podrían ayudarte a asegurarte de que todo funcione correctamente:

  1. Consumo de la API: Ya tienes la clase ConsumoAPI que se encarga de realizar la solicitud HTTP y obtener los datos en formato JSON. Asegúrate de que la URL que estás utilizando sea correcta y de que el API key esté vigente.

  2. Conversión de Datos: La clase ConvierteDatos utiliza ObjectMapper para convertir el JSON en un objeto de tipo DatosSerie. Esto parece estar bien configurado. Solo asegúrate de que los alias de JSON en DatosSerie coincidan exactamente con los nombres de los campos en el JSON que estás recibiendo.

  3. Modelo de Datos: Tu clase DatosSerie está usando record, lo cual es una buena práctica para datos inmutables. Asegúrate de que todos los campos que necesitas del JSON estén representados aquí.

  4. Ejecución del Programa: En tu clase principal ScreenmactchApplication, estás ejecutando el consumo de la API y la conversión de datos dentro del método run. Esto debería imprimir los resultados en la consola cuando ejecutes la aplicación.

Un pequeño consejo adicional sería manejar las excepciones de una manera más específica para mejorar la depuración. Por ejemplo, podrías imprimir un mensaje más descriptivo si ocurre un error durante la conversión de datos o la solicitud HTTP.

Espero que estos consejos te sean útiles y que tu aplicación funcione tal como esperas. ¡Espero haber ayudado y buenos estudios!