1
resposta

[Dúvida] Dificuldade em gravar o número de temporadas na variável

Estou tentando aplicar o uso das classes record também na classe de Series e Filmes, mas estou tendo um pequeno problema. Estou consigo salvar todos os dados que eu quero do JSON da API na variável da classe, exceto as temporadas.

o record da classe se entra assim

public record SerieOmdb(String title, String year, String runtime,
                        int totalSeasons, boolean response) {

Como podem ver, busquei deixar o nome igualzinho ao que a API retorna "totalSeasons"

Usando como teste o game of thrones ele retorna assim ..."imdbID":"tt0944947","Type":"series","totalSeasons":"8"...

E o meu construtor está assim:

public Serie(SerieOmdb serieOmdb) {
       super(serieOmdb.title(), serieOmdb.year());
       this.episodeDuration = Integer.valueOf(serieOmdb.runtime().substring(0,2));
       this.seasons = Integer.valueOf(serieOmdb.totalSeasons());
       this.finished = serieOmdb.response();
   }

Já tentei mudar o tipo da variável para String em todos os lugares, mas ainda assim, não to conseguindo capturar a informação e armazenar, no fim sempre acaba voltando como Null ou como 0.

1 resposta

Olá, Mateus! Tudo bem?

Pelo que você descreveu, parece que a questão pode estar relacionada à forma como o dado "totalSeasons" está sendo tratado ao ser deserializado do JSON para o objeto SerieOmdb. Como você mencionou que o valor retorna como "null" ou "0", uma possível causa pode ser a incompatibilidade entre os tipos de dados esperados e os dados que estão sendo recebidos do JSON.

Uma coisa importante a verificar é se a API realmente está retornando o valor de "totalSeasons" como um número inteiro ou como uma string. Se o valor estiver vindo como uma string (como parece ser o caso, já que você mencionou "totalSeasons":"8"), precisamos garantir que a conversão para inteiro está sendo feita corretamente.

No seu construtor para Serie, você está usando Integer.valueOf(serieOmdb.totalSeasons()) para converter o valor de temporadas para um inteiro. Isso normalmente deveria funcionar, mas pode haver casos em que o valor retornado não é diretamente convertível para inteiro, o que pode causar erros. Uma boa prática é adicionar alguma validação ou tratamento de erro para esses casos. Por exemplo, você pode tentar usar um bloco try-catch para capturar possíveis exceções que ocorram durante a conversão:

public Serie(SerieOmdb serieOmdb) {
    super(serieOmdb.title(), serieOmdb.year());
    this.episodeDuration = Integer.valueOf(serieOmdb.runtime().substring(0,2));
    try {
        this.seasons = Integer.valueOf(serieOmdb.totalSeasons());
    } catch (NumberFormatException e) {
        this.seasons = 0; // ou algum valor padrão que faça sentido para seu contexto
    }
    this.finished = serieOmdb.response();
}

Além disso, verifique se o campo totalSeasons está sendo corretamente mapeado do JSON para o objeto SerieOmdb. Se estiver usando alguma biblioteca como Gson ou Jackson para deserialização, certifique-se de que o nome do campo no JSON está exatamente igual ao nome do campo no record SerieOmdb. Se houver alguma diferença nos nomes ou na capitalização, isso pode causar o problema que você está enfrentando.

Espero que essas sugestões ajudem a resolver o problema, caso não resolva, peço que compartilhe todo o seu código para que eu realize testes.

Bons estudos!

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