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