2
respostas

[PROBLEMA] Está imprimindo alguns valores nulos

package br.com.projeto.screematch;

import br.com.projeto.screematch.model.DadosEpisodio;
import br.com.projeto.screematch.model.DadosSerie;
import br.com.projeto.screematch.model.DadosTemporada;
import br.com.projeto.screematch.service.ConsumoAPI;
import br.com.projeto.screematch.service.ConverteDados;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

@SpringBootApplication
public class ScreematchApplication implements CommandLineRunner {

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

    @Override
    public void run(String... args) throws Exception {
        Scanner scan = new Scanner(System.in);

        // Pesquisa série
        var consumoAPI = new ConsumoAPI();
        var json = consumoAPI.obterDados("https://www.omdbapi.com/?t=supernatural&apikey=44e7b972");

//      Busca série pelo scanner
//		System.out.print("Escolha uma serie: ");
//		String busca = scan.nextLine();
//		 var json = consumoAPI.buscaDados(busca);


        // Converter um json em um objeto da classe DadosSerie para Jackson
        ConverteDados conversor = new ConverteDados();
        DadosSerie dados = conversor.obterDados(json, DadosSerie.class);
        System.out.println(dados);

        // Imprimir dados do EP
         json = consumoAPI.obterDados("https://www.omdbapi.com/?t=supernatural&Season=1&episode=1&apikey=44e7b972");
        DadosEpisodio dadosEpisodio = conversor.obterDados(json, DadosEpisodio.class);
        System.out.println(dadosEpisodio);

        List<DadosTemporada> temporadas = new ArrayList<>();

        for (int i = 1; i <= dados.totalTemporadas(); i++) {
            json = consumoAPI.obterDados("https://www.omdbapi.com/?t=supernatural&Season=" + i + "&apikey=44e7b972");
            DadosTemporada dadosTemporada = conversor.obterDados(json, DadosTemporada.class);
            temporadas.add(dadosTemporada);
        }
        temporadas.forEach(System.out::println);

    }
}
package br.com.projeto.screematch.model;

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

import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DadosTemporada(@JsonAlias ("Season")  Integer numero,
                             @JsonAlias ("Episodes") List<DadosEpisodio> episodios             
                             ) {
}
package br.com.projeto.screematch.model;

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

@JsonIgnoreProperties (ignoreUnknown = true)
public record DadosEpisodio(@JsonAlias ("Title") String tituloEpisodio,
                            @JsonAlias ("Episode") String episodio,
                            @JsonAlias ("Plot") String descricao,
                            @JsonAlias ("Season") String temporada,
                            @JsonAlias ("Runtime") String duracao,
                            @JsonAlias ("Released") String dataLancamento,
                            @JsonAlias ("Year") Integer ano,
                            @JsonAlias ("imdbRating") String avaliacao
) {
}

Quando eu peço para imprimir os dados do episódio ele consegue puxar os dados corretamente, porém com o loop de episódios e temporadas alguns valores vem nulos:

DadosEpisodio[tituloEpisodio=Pilot, episodio=1, descricao=Sam and Dean Winchester were trained by their father to hunt the creatures of the supernatural. Now, their father has mysteriously disappeared while hunting the demon that killed their mother, 22 years ago., temporada=1, duracao=44 min, dataLancamento=13 Sep 2005, ano=2005, avaliacao=8.5] DadosTemporada[numero=1, episodios=[DadosEpisodio[tituloEpisodio=Pilot, episodio=1, descricao=null, temporada=null, duracao=null, dataLancamento=2005-09-13, ano=null, avaliacao=8.5]

2 respostas

Oi, Diego! Como vai?

O problema aparece quando tenta listar os episódios de uma temporada inteira, o que indica que o JSON da temporada não traz o mesmo nível de detalhes que a busca individual por episódio.

Uma dica interessante para o futuro é validar o JSON de resposta antes de mapear os objetos. Você pode usar um System.out.println(json); antes de converter, assim consegue comparar o que vem da API nas diferentes consultas:


System.out.println(json);

Sem acentuação: Esse comando exibe no console o JSON bruto retornado pela API, facilitando a identificação de campos ausentes.

Mas caso não consiga identificar corretamente a partir desse print da informação vinda do Json, peço que compartilhe todo o seu projeto. Recomendo que faça isso usando o GitHub.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

O json está puxando tudo corretamente, não consegui identificar o problema.

link do repositório no GitHub: https://github.com/DiegoBalieiroDev/APISeries