3
respostas

com.google.gson.JsonIOException

Boa noite, o meu código apareceu esse erro na hora de executar o gson.fromJson:

package Aplication;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import java.util.Scanner;

import com.google.gson.Gson;

import Modulo.Titulo;

public class Principal {

    static public void main(String[] args) {
        
    Gson gson = new Gson();
    Scanner sc = new Scanner(System.in);	
        
        System.out.println("Digite o nome do filme que voce deseja ver: ");
        String nome = sc.next();
        
        String endereco = "http://www.omdbapi.com/?t=" + nome + "&apikey=929f2c9f";
        
        
         HttpClient client = HttpClient.newHttpClient();
         HttpRequest request = HttpRequest.newBuilder()
                 .uri(URI.create(endereco))
                 .build();

         
         try { 
             
     HttpResponse<String> response = client
     .send(request, BodyHandlers.ofString()); 
        
    System.out.println(response.body());
    
    String json = response.body();
    
    Titulo meuTitulo = gson.fromJson(json,Titulo.class);
    
    System.out.println("Nome do filme: " + meuTitulo.getNome());
    
        }
         catch(Exception e){
        System.out.println("Erro");	 
        System.out.println(e.toString());
         }
    
        
        
    }
    
    
}

com.google.gson.JsonIOException: Failed making field 'Modulo.Titulo#nome' accessible; either change its visibility or write a custom TypeAdapter for its declaring type

obs: Já tentei algumas soluçoes como mudar as variaveis para tipo publico, verificar os campos, mas ainda assim não foi.

3 respostas

Boa noite.

Bom há três pontos importantes no que toca a sua questão:

Ou formato do json não é válido ou não corresponde à classe que você quer converter.

Ou método fromJson está a ser chamado com um argumento incorreto ou nulo ou então a classe que você quer converter tem algum campo ou método que o gson não consegue serializar ou desserializar. Você pode tentar verificar se o seu json está bem formatado e se a sua classe Titulo tem todos os campos e anotações necessários para o gson.

No caso, a classe deveria ter todos os campos do json? O curioso é que no vídeo apenas no campo nome foi necessário.

Oi, Ezequiel! Tudo bem?

Este problema pode ocorrer devido a uma falha no acesso do Gson ao pacote onde está contida sua classe Título, logo, ele não consegue acesso a ela. Para resolver este problema, você pode ir até seu arquivo module-info.java e adicionar a linha:

opens nome_do_pacote to com.google.gson;

Substitua o nome_do_pacote pelo caminho completo do pacote onde está contida a classe e isto deve resolver seu problema.

Bons estudos!