Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

Haga lo que hicimos

SUPER CLASE

import com.oasb.Screen_Macht.Modelo.DatosDeLaSerie;
import com.oasb.Screen_Macht.Servcio.ConsumoAPI;
import com.oasb.Screen_Macht.Servcio.ConvirteDatos;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ScreenMachtApplication implements CommandLineRunner { //implementacion de interface CommandalineRunner

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


    @Override //se sobrescribe el metodo de la interface
    public void run(String... args) throws Exception {


       //instacia 1, llamada consumoAPI
        var consumoAPI = new ConsumoAPI();  //aqui se reaiza la comunicacion entre claseScrenMatch y ConsumoAPI para traer la informacion de la API
        var json = consumoAPI.obtenerDatos( "https://www.omdbapi.com/?t=Continuum&y=2012&apikey=XXXXXXX"); //AQUI SE gaurda la inforcion en formato json
        System.out.println(json);  // aqui se imprime enpantalla dicha informacion


        // instacia 2, llamada conversor
        ConvirteDatos conversor = new ConvirteDatos();
        var datos = conversor.obtenerDatos(json, DatosDeLaSerie.class); //aqui se guardaran los datos de la API obtnenidos con el metodo generico llamado
                                                                        // obtenerDatos y convertidos a datos de tipo serie
        System.out.println(datos);

    }
}

CLASE HIJA

package com.oasb.Screen_Macht.Modelo;

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

@JsonIgnoreProperties ( ignoreUnknown = true ) //se ocupa una ANOTACION, esta es una propiedad que ignora datos que no se encuentran mapeados, es decir,
                                               // en esta clase  ("Title") String titulo, ("totalSeasons") Integer totalDeTemporadas Y
                                                // ("imdbRating") String evaluacio
public record DatosDeLaSerie(
        //@JsonAlias y @JsonProperty son anotaciones de Jackson,
        // una biblioteca Java para procesar JSON, que ayudan a mapear propiedades de clase a campos JSON.
       @JsonAlias ("Title") String titulo,
       @JsonAlias ("totalSeasons") Integer totalDeTemporadas,
       @JsonAlias ("imdbRating") String evaluacion) {

}

CLASE HIJA

package com.oasb.Screen_Macht.Servcio;

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);
            }
            //variable de tipo String, la cual va a recibir esos datos
            String json = response.body();
            return json;
        }

CLASE HIJA

package com.oasb.Screen_Macht.Servcio;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ConvirteDatos implements InterfaceConvierteDatos{ //se impleneta esa interface y se crea el metodo (se sobre escribe)
    //
    private ObjectMapper objectMapper = new ObjectMapper(); //se mandan a llamar el metodo de la intefaceConvierteDatos


    @Override  //se sobre escriben el metodo de la interface para poder obtener datos generales de la API
    public <T> T obtenerDatos(String json, Class<T> clase) { // <T> esto significa que se esta declarado de forma generica para obtener datos genericos de una API

        try {
            return objectMapper.readValue(json, clase);  // retornara (devolver) un objeto de tipo objectMapper y con
                                                         // readValue transforma el archivo json obtenido de la API en una clase
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

INTERFACE

package com.oasb.Screen_Macht.Servcio;

public interface InterfaceConvierteDatos {

    //se crea este metodo en esta Interface para ser usada en la clase ConvierteDatos
    // y obtener datos de forma generica

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


}

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad