Saludos. Adjunto mi visión del ejercicio, usando maven como gestor de paquetes y dependencias.
PD: Una solución que contemplé para la conversión entre dtos y json es usar mapeadores, y la dependencia Mapstruct. No lo usé por temas de tiempo, perdón :(.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>FirstProgram</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
</project>
titulo dto
package Models;
import lombok.NonNull;
import lombok.With;
@With
public record TituloDTO(
@NonNull
String title,
@NonNull
String year,
@NonNull
String runtime
) {
}
contenedor de ejecución
package org.example;
import Models.Pelicula;
import Models.TituloDTO;
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.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;
public class Busqueda {
private static Scanner entrada = new Scanner(System.in).useDelimiter("\n");
public static void main(String[] args) throws IOException, InterruptedException {
//Entradas de solicitud get
System.out.print("Ingrese el nombre de la pelicula: ");
String t = entrada.nextLine();
String apiKey = "9ed2cbd1";
String dominio = "http://www.omdbapi.com/";
//Solicitud get a la API parametrizada
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(dominio + "?t=" + t + "&apiKey=" + apiKey))
.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();
TituloDTO titulo = gson.fromJson(json, TituloDTO.class);
Pelicula pelicula = new Pelicula(titulo);
System.out.println(pelicula);
}
}