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

[Duda] Error al correr programa para buscar los top 5 episodios

Hola equipo, estoy haciendo el curso con la profesora Genesys de Java: trabajando con lambdas, streams y Spring Framework, al iniciar mi aplicacion habiendo seguido los pasos de la clase me da un error en consola, es el siguiente:

Caused by: java.lang.RuntimeException: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'error': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
 at [Source: (String)"error code: 522"; line: 1, column: 6]

He investigado sobre el error y encontre que esto sucede cuando la API no esta enviando los datos correctamente.

Sin embargo, si vuelvo a iniciar o correr el programa varias veces, me muestra los datos que le estoy pidiendo.

No se si es un glitch de la API o es un error en mi codigo, no creo que sea un error de codigo porque intentan varias veces si me muestra el resultado, entonces queria saber si me pueden ayudar resolviendo esta duda.

Muchas gracias de antemano.

1 respuesta

Hola Victor

El error que describes indica que la API está devolviendo un texto no válido como respuesta cuando el programa espera un JSON. Este problema puede deberse a varios factores, como errores intermitentes en la API o problemas de conexión. Vamos a analizarlo y sugerir posibles soluciones:

Análisis del error

El mensaje indica que el programa recibió un texto que no se puede interpretar como JSON. Específicamente, el token 'error code: 522' no es un JSON válido. Esto ocurre porque:

  1. La API no siempre responde con JSON. Puede estar devolviendo un mensaje de error en texto plano en lugar de JSON en ciertos casos.
  2. Error de conectividad. Un error 522 usualmente está relacionado con problemas de conectividad entre el cliente y el servidor (por ejemplo, un timeout de Cloudflare).

Soluciones posibles

  1. Manejo de respuestas no JSON. Puedes añadir validaciones para manejar casos en los que la API no responde con JSON válido. Por ejemplo:

    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public static boolean isValidJson(String response) {
        try {
            ObjectMapper mapper = new ObjectMapper();
            mapper.readTree(response);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    

    Antes de procesar la respuesta, verifica si es un JSON válido:

    if (isValidJson(apiResponse)) {
        // Procesar JSON
    } else {
        System.err.println("Respuesta no válida de la API: " + apiResponse);
    }
    
  2. Reintentos automáticos.

    Si el problema ocurre intermitentemente, puedes implementar una lógica de reintento para manejar fallos temporales. Por ejemplo:

    public String fetchDataWithRetry(int maxRetries) {
        int attempt = 0;
        while (attempt < maxRetries) {
            try {
                String response = callApi(); // Método que llama a la API
                if (isValidJson(response)) {
                    return response;
                }
            } catch (Exception e) {
                System.err.println("Error al intentar conectar con la API: " + e.getMessage());
            }
            attempt++;
            try {
                Thread.sleep(1000); // Esperar 1 segundo antes de reintentar
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                break;
            }
        }
        throw new RuntimeException("No se pudo obtener una respuesta válida después de " + maxRetries + " intentos.");
    }
    
  3. Comunicación con el proveedor de la API. Si tienes control o contacto con el proveedor de la API:

    • Informa el problema para que validen por qué a veces devuelve respuestas no JSON.
    • Solicita documentación para verificar si existe un código de error 522 manejable.
  4. Logs detallados. Agrega logs en tu código para registrar la respuesta completa de la API en caso de errores. Esto te permitirá identificar patrones o causas del problema.

    System.out.println("Respuesta de la API: " + apiResponse);
    
  5. Validación en el cliente. Si el error se produce solo en casos específicos de uso o entradas, asegúrate de que estás enviando datos válidos a la API.

Conclusión

Aunque parece que el problema está en la API, agregar una capa de validación y manejo de errores en tu código hará que tu aplicación sea más robusta. Implementa las estrategias de validación de JSON y reintento para mejorar la tolerancia a fallos, y si el problema persiste, consulta con el equipo de soporte de la API para más aclaraciones.

Saludos,

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!