Fiz o código igual ao da aula, porém quando digito um filme que tem mais de 100 minutos, ele aparece no "Título já convertido", apenas com duas casas decimais....
Classe PrincipalComBusca
package br.com.alura.screenmatch.principal;
import br.com.alura.screenmatch.modelos.Titulo;
import br.com.alura.screenmatch.modelos.TituloOmdb;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.IOException;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class PrincipalComBusca {
public static void main(String[] args) throws IOException, InterruptedException {
Scanner leitura = new Scanner(System.in);
System.out.println("Digite um filme para a busca: ");
var busca = leitura.nextLine();
String chave = "&apikey=d04f9223";
String buscaEncoded = URLEncoder.encode(busca, StandardCharsets.UTF_8.toString());
String endereco = "https://www.omdbapi.com/?t=" + buscaEncoded + chave;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(endereco))
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
String json = response.body();
System.out.println(json);
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
TituloOmdb meuTituloOmdb = gson.fromJson(json, TituloOmdb.class);
System.out.println(meuTituloOmdb);
Titulo meuTitulo = new Titulo(meuTituloOmdb);
System.out.println("Titulo já convertido");
System.out.println(meuTitulo);
}
}
Classe Titulo
package br.com.alura.screenmatch.modelos;
import com.google.gson.annotations.SerializedName;
public class Titulo implements Comparable<Titulo> {
@SerializedName("Title")
private String nome;
@SerializedName("Year")
private int anoDeLancamento;
private int duracaoEmMinutos;
private boolean incluidoNoPlano;
private double somaDasAvaliacoes;
private int totalDeAvaliacoes;
public Titulo(TituloOmdb meuTituloOmdb) {
this.nome = meuTituloOmdb.title();
this.anoDeLancamento = Integer.valueOf(meuTituloOmdb.year());
this.duracaoEmMinutos = Integer.valueOf(meuTituloOmdb.runtime().substring(0, 2));
}
public void setNome(String nome) {
this.nome = nome;
}
public void setAnoDeLancamento(int anoDeLancamento) {
this.anoDeLancamento = anoDeLancamento;
}
public void setDuracaoEmMinutos(int duracaoEmMinutos) {
this.duracaoEmMinutos = duracaoEmMinutos;
}
public void setIncluidoNoPlano(boolean incluidoNoPlano) {
this.incluidoNoPlano = incluidoNoPlano;
}
public String getSomaDasAvaliacoes() {
return "Soma das avaliações: " + somaDasAvaliacoes;
}
public String getTotalDeAvaliacoes() {
return "Total de avaliações: " + totalDeAvaliacoes;
}
public String getNome() {
return nome;
}
public int getAnoDeLancamento() {
return anoDeLancamento;
}
public int getDuracaoEmMinutos() {
return duracaoEmMinutos;
}
public boolean isIncluidoNoPlano() {
return incluidoNoPlano;
}
public void exibeFichaTecnica() {
System.out.println("Nome do filme: " + nome);
System.out.println("Ano de lançamento: " + anoDeLancamento);
System.out.println("Duração em minutos: " + duracaoEmMinutos);
System.out.println("Incluido no plano: " + incluidoNoPlano);
}
public Titulo(String nome, int anoDeLancamento) {
this.nome = nome;
this.anoDeLancamento = anoDeLancamento;
}
public void avalia(double nota) {
somaDasAvaliacoes += nota;
totalDeAvaliacoes++;
}
public double pegaMedia() {
return somaDasAvaliacoes / totalDeAvaliacoes;
}
@Override
public int compareTo(Titulo outroTitulo) {
return this.getNome().compareTo(outroTitulo.getNome());
}
@Override
public String toString() {
return "Título = " + nome +
"{" + anoDeLancamento + "}, " +
"duração: " + duracaoEmMinutos;
}
}
Resultado quando busco um filme com mais de 100 minutos de duração