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

[Sugerencia] Haga lo que hicimos

package com.aluracursos.screenmatch;

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

@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 {
        var consumoApi = new ConsumoAPI();
        var json = consumoApi.obtenerDatos("https://www.omdbapi.com/?t=game-of+thrones&apikey=c236e1a");
        //var json = consumoApi.obtenerDatos("https://coffee.alexflipnote.dev/random.json");
        System.out.println(json);
        ConvierteDatos conversor = new ConvierteDatos();
        var datos = conversor.obtenerDatos(json, DatosSerie.class);
        System.out.println(datos);
    }
}

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


package com.aluracursos.screenmatch.service;

public interface IConvierteDatos {
    <T> T obtenerDatos(String json, Class<T> clase);
}

package com.aluracursos.screenmatch.service;

import com.aluracursos.screenmatch.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);
        }
    }
}

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") Integer totalDeTemporadas,
        @JsonAlias("imdbRating") String evaluacion) {
}

1 respuesta

Hola Juan, espero que estés bien

Parece que estás siguiendo muy bien el ejercicio de consumir una API y modelar los datos de una serie. Tu implementación parece estar en línea con lo que se espera en la lección. Aquí hay algunos puntos que podrías considerar para asegurarte de que todo funcione correctamente:

  1. Verificación de la API: Asegúrate de que la URL de la API que estás utilizando es correcta y que tienes acceso a ella. Si estás usando una clave de API, verifica que sea válida.

  2. Manejo de Excepciones: Aunque ya estás manejando excepciones en el método obtenerDatos de ConsumoAPI, podrías considerar agregar mensajes más descriptivos para facilitar la depuración en caso de errores.

  3. Validación de Datos: Después de convertir los datos JSON a objetos Java, puedes agregar validaciones para asegurarte de que los datos obtenidos son los esperados.

  4. Pruebas: Considera agregar pruebas unitarias para verificar que tus métodos funcionan correctamente. Esto puede ayudarte a identificar problemas de manera más rápida.

  5. Documentación: Añadir comentarios en tu código puede ser útil para ti y para otros que puedan revisar tu código en el futuro.

Si todo está funcionando como esperas, ¡felicitaciones! Has logrado consumir una API y modelar los datos en Java, lo cual es una habilidad muy valiosa.

Espero haber ayudado y buenos estudios!