2
respuestas

No trae los datos del Json

Hola, ya coloqué las annotations @SerializedName pero cuando quiero imprimir los valores me da null y 0 en el int.

Qué podría estar fallando a la hora de convertir el Json a los atributos de la clase?

gracias por tu ayuda.

2 respuestas

Hola por favor compartemos el fragmento de codigo, ya que nos queda dificil comprabar que es lo que te falla.. saludos

Hola, gracias por responder.

Mira aquí está la petición.


        String api_key = "76e5fecce4f78460188830f0c6ae047f";
        Scanner teclado = new Scanner(System.in);
        System.out.println("Ingrese el nombre de la pelicula");
        var movieName = teclado.nextLine();
        String direccion = "https://api.themoviedb.org/3/search/movie?query=" + movieName.replace(" ", "+") +"&page=1&api_key=" + api_key;

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(direccion))
                .build();

        HttpResponse<String> response = client
                .send(request, HttpResponse.BodyHandlers.ofString());

        
        String json = response.body();
        System.out.println(json);
        Gson gs = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES)
                .create();			
                

        Intermedio title = gs.fromJson(json, Intermedio.class);
        System.out.println(title);

Y esta es la clase Titulo:

package com.alura.screenmatch.modelos;

import com.google.gson.annotations.SerializedName;

public class Titulo implements Comparable<Titulo>  {

    @SerializedName("original_title")
    private String nombre;

    @SerializedName("release_date")
    private int fechaDeLanzamiento;

    private boolean incluidoEnElPlan;

    @SerializedName("vote_average")
    private double sumaDeLasEvaluaciones;

    @SerializedName("vote_count")
    private int totalDeEvaluaciones;

    private int duracionEnMinutos;

    public String getNombre() {
        return nombre;
    }

    public int getFechaDeLanzamiento() {
        return fechaDeLanzamiento;
    }

    public boolean isIncluidoEnElPlan() {
        return incluidoEnElPlan;
    }

    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }

    public int getTotalDeEvaluaciones() {
        return totalDeEvaluaciones;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setFechaDeLanzamiento(int fechaDeLanzamiento) {
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public void setIncluidoEnElPlan(boolean incluidoEnElPlan) {
        this.incluidoEnElPlan = incluidoEnElPlan;
    }

    public void setDuracionEnMinutos(int duracionEnMinutos) {
        this.duracionEnMinutos = duracionEnMinutos;
    }

    public void muestraFichaTecnica(){
        System.out.println("Nombre de la película: " + nombre);
        System.out.println("Año de lanzamiento: " + fechaDeLanzamiento);
    }

    public void evalua(double nota){
        sumaDeLasEvaluaciones += nota;
        totalDeEvaluaciones++;
    }

    public double calculaMediaEvaluaciones(){
        return sumaDeLasEvaluaciones / totalDeEvaluaciones;
    }

    @Override
    public int compareTo(Titulo titulo) {
        return this.getNombre().compareTo(titulo.getNombre());
    }

    @Override
    public String toString() {
        return """
                Nombre: %s
                Fecha de lanzamiento: %s
                """.formatted(this.nombre,this.fechaDeLanzamiento);
    }

La respuesta llega bien en formato JSON pero no se relacionan los valores con las variables. Gracias por tu respuesta. :D