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

[Sugerencia] total de temporadas null

Hay series en a API de OMDB que no traen valor de total de temporadas y retorna un NullPointerException mi solución para este problema fue el siguiente: En la clase Serie use un try catch para que al retornar el null lo convierta en un Integer

public Serie(DatosSeries datosSeries) {
        this.titulo = datosSeries.titulo();
        // se modificó para que en caso retorne null devuelva un entero
        try {
            this.totalDeTemporadas = Integer.valueOf(datosSeries.totalDeTemporadas());
        } catch (NumberFormatException | NullPointerException e) {
            this.totalDeTemporadas = 0;
        }
        this.evaluacion = OptionalDouble.of(Double.valueOf(datosSeries.evaluacion())).orElse(0);
        this.reparto = datosSeries.reparto();
        this.poster = datosSeries.poster();
        this.genero = Categoria.fromString(datosSeries.genero().split(",")[0].trim());
        this.sinapnis = ConsultaGemini.obtenerTraduccion(datosSeries.sinapnis());
    }

Después en la clase Principal en buscarEpisodiosPorSerie();

private void buscarEpisodioPorSerie () {
        mostrarSeriesBuscadas();
        System.out.println("Escribe el nombre de la serie de la cual quieres ver los episodios");
        var nombreSerie = teclado.nextLine();

        Optional<Serie> serie = repositorio.findByTituloContainsIgnoreCase(nombreSerie);

        if (serie.isPresent()) {
            var serieEncontrada = serie.get();
            List<DatosTemporada> temporadas = new ArrayList<>();

            //Manejo del total de temporadas en caso de que sea null
            Integer totalTemporada = serieEncontrada.getTotalDeTemporadas();
            if (totalTemporada == null || totalTemporada == 0) {
                totalTemporada = 1;
            }

            //acá se reemplaza get.totalDeTemporas por la variable local que estamos creando arriba y asigarle como uno por defecto en caso 
            //de que desde la API se envie en totalDeTemporadas como null
            for (int i = 1; i <= totalTemporada; i++) {
                var json = consumeAPI.obtenerDatos(URL_BASE + serieEncontrada.getTitulo().replace(" ", "+") + "&season=" + i + API_KEY);
                DatosTemporada datosTemporada = conversor.obtenerDatos(json, DatosTemporada.class);
                temporadas.add(datosTemporada);
            }
            temporadas.forEach(System.out::println);

            List<Episodio> episodios = temporadas.stream()
                    .flatMap(d -> d.episodios().stream()
                            .map(e -> new Episodio(d.numero(), e)))
                    .collect(Collectors.toList());

            episodios.forEach(e -> e.setSerie(serieEncontrada));
            serieEncontrada.setEpisodios(episodios);
            repositorio.save(serieEncontrada);
        }
    }

A lo mejor es algo tosco, pero me funciono de esa manera

1 respuesta

Hola Michael, espero que estés bien

¡Qué bueno que encontraste una solución para manejar el caso en que el total de temporadas es null! Tu enfoque de usar un try-catch para manejar la excepción y asignar un valor por defecto es una manera efectiva de evitar que la aplicación se rompa.

Aquí tienes algunas sugerencias para mejorar tu solución:

  1. Uso de Optional: En lugar de manejar el null con un try-catch, podrías considerar usar Optional para manejar el valor de totalDeTemporadas. Esto puede hacer que el código sea más limpio y expresivo. Por ejemplo:

    this.totalDeTemporadas = Optional.ofNullable(datosSeries.totalDeTemporadas())
                                     .map(Integer::valueOf)
                                     .orElse(0);
    
  2. Validación en buscarEpisodioPorSerie: Me parece bien que hayas establecido un valor por defecto de 1 para totalTemporada en caso de que sea null o 0. Esto asegura que al menos se intente buscar una temporada.

  3. Comentarios y claridad: Asegúrate de que los comentarios en el código sean claros y concisos. Esto ayudará a ti y a otros que puedan trabajar en el código en el futuro a entender rápidamente lo que hace cada parte.

Recuerda que siempre hay varias maneras de abordar un problema en programación, y lo importante es encontrar una solución que funcione bien para tu caso específico.

Espero que estas sugerencias te sean útiles y te ayuden a seguir mejorando tu aplicación. ¡Bons estudios!