3
respostas

[Dúvida] Java & Json - Imersão

Saudações. Estou fazendo a imersão Java e travei na seguinte dúvida. Quando executo o código abaixo com a URI "uri(URI.create("https://api.themoviedb.org/3/movie/110?api_key=minhachaveOK"))" que retorna somente um filme, consigo ler o json de retorno e printar os campos que especifiquei na classe Filmes sem problemas. Quando tento a mesma operação consultando uma lista de filmes ".uri(URI.create("https://api.themoviedb.org/3/movie/now_playing"))", recebo null.

Como devo proceder para printar os filmes retornados? Sendo mais específico, como devo tratar o JSON de retorno quando ele tem diversos Filmes? Ao printar "resposta.body()" vejo que o JSON com a lista de filmes "now playing" é retornado ok, não sei como tratar o retorno e imprimir os "titles" retornados, tomo null.

Obrigado desde já!

package javaApi;

class Filmes{
    private String title;
    private String original_title;
     public String getTitle() {
        return title;
    }
    public String getOriginal_title() {
        return original_title;
    }
    
}
import java.io.IOException;
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 com.fasterxml.jackson.databind.*;

public class SimpleTesting{
    public static void main(String[] args) throws InterruptedException{
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        try {
            HttpClient cliente = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.themoviedb.org/3/movie/now_playing"))
            .header("accept", "application/json")
            .header("Authorization", "Bearer meuTOKENOK")
            .method("GET", HttpRequest.BodyPublishers.noBody())
            .build();
                        
            HttpResponse<String> resposta = cliente.send(request,BodyHandlers.ofString());
                        
            Filmes filme = mapper.readValue(resposta.body(), Filmes.class);
            System.out.println("Title: "+ filme.getTitle());
            System.out.println("Original Title: "+ filme.getOriginal_title());

        }catch(IOException e) {
            e.printStackTrace();
        }
    }
}

Saida do console:

Title: null
Original Title: null
3 respostas

Estudante, bom dia.

Estava análisando seu codigo e ná linha .header("Authorization", "Bearer meuTOKENOK") creio que você quis passar o meuTOKENOK como um parametro, porem você acabou passando ele como string, tente novamente colocando .header("Authorization", "Bearer " + meuTOKENOK) ou se não coloque o token diretamente logo depois do Bearer e o espaço.

Bom dia Maxuel. Obrigado pela rápida resposta! Errei no hora de tirar o token original para colar aqui, vc tem razão.

Aqui a autenticação está funcionando ok, meu problema é que não sei tratar o JSON quando executo uma consulta que retorna vários registros (filmes). Quando mando buscar um filme só, tudo funciona ok. Lí bastante e fiz diversos testes, mas não entendi como tratar esse cenário.

Estudante, bom dia.

Você tem a opção de usar o Gson para deserializar o retorno de Json.

https://mvnrepository.com/artifact/com.google.code.gson/gson

Entre no github https://github.com/google/gson e lá vai ter um passo a passo de como é utilizado, isso acredito que vai resolver seus problemas.