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); //
}