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

Haga lo que hicimos en el aula: consumiendo una API, creando clases e interfaces, e implementando métodos

Modelo

package com.aluracursos.screenmatch.model;

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

@JsonIgnoreProperties(ignoreUnknown = true)

public record datosPelicula(

    /*
    Mapear datos de la api a la aplicacion con @jsonalias
    tambien podemos hacer lo mismo con @JsonProperty
    JsonAlias nos permite leer datos de la API y JsonProperty
             nos permite leer y escribir datos en el api

             hacer que la app ignore  campos no mapeados con
             @JsonIgnoreProperties
             */

    @JsonAlias ("Title") String titulo,
    @JsonAlias ("Runtime") String totalDeTiempo,
    @JsonAlias ("imdbRating") String evaluacion
                     ) {

}

servicio consumo api

package com.aluracursos.screenmatch.service;

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

Interfaz IconvierteDatos

package com.aluracursos.screenmatch.service;

public interface IconvierteDatos {
/*
Usaremos metodos genericos
*/

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

}

Clase ConvierteDatos

package com.aluracursos.screenmatch.service;

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

/*
Conversor de datos api a formato java 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);
    }
}

}

clase main

package com.aluracursos.screenmatch;

import com.aluracursos.screenmatch.model.datosPelicula;
import com.aluracursos.screenmatch.service.ConvierteDatos;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.aluracursos.screenmatch.service.ConsumoAPI;

@SpringBootApplication
public class ScreenmatchApplication implements CommandLineRunner {

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

@Override
public void run(String... args) throws Exception {
    ///System.out.println("Hola Mundo desde Spring");

    var consumoAPI = new ConsumoAPI();
    var json = consumoAPI.obtenerDatos("https://www.omdbapi.com/?i=tt3896198&apikey=7eac8ca2");

    System.out.print(json);
    ConvierteDatos conversor = new ConvierteDatos();
    var datos = conversor.obtenerDatos(json, datosPelicula.class);
    System.out.println(" ");
    System.out.println(datos);
    

}

}

1 respuesta

Hola Alexis,

Parece que estás en el camino correcto siguiendo el ejemplo de la lección para consumir una API y modelar los datos. Ya has implementado las clases necesarias para consumir la API y convertir los datos JSON a objetos Java. Ahora, para completar la tarea, necesitas hacer algo similar para modelar los datos de una serie, tal como lo hiciste con datosPelicula.

Aquí tienes un ejemplo de cómo podrías hacerlo:

  1. Modelo para la serie: Crea una nueva clase datosSerie similar a datosPelicula para mapear los datos de la serie que quieres consumir. Asegúrate de usar las anotaciones @JsonAlias para los campos que necesitas.

    package com.aluracursos.screenmatch.model;
    
    import com.fasterxml.jackson.annotation.JsonAlias;
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    
    @JsonIgnoreProperties(ignoreUnknown = true)
    public record datosSerie(
            @JsonAlias("Title") String titulo,
            @JsonAlias("TotalSeasons") String totalDeTemporadas,
            @JsonAlias("imdbRating") String evaluacion
    ) {
    }
    
  2. Consumir datos de la serie: Usa la clase ConsumoAPI para obtener los datos de la serie desde la API. Asegúrate de usar la URL correcta para obtener los datos de la serie.

  3. Convertir datos de la serie: Usa la clase ConvierteDatos para convertir los datos JSON de la serie en un objeto datosSerie.

  4. Actualizar la clase principal: Modifica la clase ScreenmatchApplication para incluir la lógica de consumo y conversión de datos de la serie, similar a lo que ya hiciste con datosPelicula.

    @Override
    public void run(String... args) throws Exception {
        var consumoAPI = new ConsumoAPI();
        var jsonSerie = consumoAPI.obtenerDatos("URL_DE_LA_SERIE");
    
        System.out.print(jsonSerie);
        ConvierteDatos conversor = new ConvierteDatos();
        var datosSerie = conversor.obtenerDatos(jsonSerie, datosSerie.class);
        System.out.println(" ");
        System.out.println(datosSerie);
    }
    

Asegúrate de reemplazar "URL_DE_LA_SERIE" con la URL correcta de la API que proporciona los datos de la serie que deseas consumir.