Dependencias
PrincipalConBusqueda.java
package com.alura.screenmatch.principal;
import com.alura.screenmatch.modelos.Titulo;
import com.alura.screenmatch.modelos.TituloOmdb;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;
public class PrincipalConBusqueda {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper()
.setPropertyNamingStrategy(PropertyNamingStrategies.UPPER_CAMEL_CASE);
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
Scanner scanner = new Scanner(System.in);
System.out.print("Escriba el nombre de una pelicula: ");
var movieName = scanner.next();
String apiKey = "your apikey";
String uriStr = "https://www.omdbapi.com/?apikey=".concat(apiKey)
.concat("&t=").concat(movieName);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(uriStr)).build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
String jsonBody = response.body();
TituloOmdb omdbWithJackson = mapper.readValue(jsonBody, TituloOmdb.class);
TituloOmdb omdbWithGson = gson.fromJson(jsonBody, TituloOmdb.class);
Titulo newTitleFromJackson = new Titulo(omdbWithJackson);
Titulo newTitleFromGson = new Titulo(omdbWithGson);
System.out.println(jsonBody);
System.out.println("With Gson: ".concat(newTitleFromGson.toString()));
System.out.println("With Jackson: ".concat(newTitleFromJackson.toString()));
}
}
TituloOmdb.java
package com.alura.screenmatch.modelos;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true) // Para que Jackson ignore las propiedades desconocidas
public record TituloOmdb(String title, String year, String runtime) {}
Titulo.java
package com.alura.screenmatch.modelos;
public class Titulo implements Comparable<Titulo> {
private String nombre;
private int fechaDeLanzamiento;
private boolean incluidoEnElPlan;
private double sumaDeLasEvaluaciones;
private int totalDeEvaluaciones;
private int duracionEnMinutos;
public Titulo(String nombre, int fechaDeLanzamiento) {
this.nombre = nombre;
this.fechaDeLanzamiento = fechaDeLanzamiento;
}
public Titulo(TituloOmdb miTituloOmdb) {
this.nombre = miTituloOmdb.title();
this.fechaDeLanzamiento = Integer.parseInt(miTituloOmdb.year());
this.duracionEnMinutos = Integer.parseInt(miTituloOmdb.runtime().substring(0,2));
}
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 otroTitulo) {
return this.getNombre().compareTo(otroTitulo.getNombre());
}
@Override
public String toString() {
return "nombre=" + nombre +
", fechaDeLanzamiento=" + fechaDeLanzamiento +
", duracionEnMinutos=" + duracionEnMinutos;
}
}