Comparto mi solución un poco tarde pero funcional. Principal
import java.io.IOException;
public class Principal {
public static void main(String[] args) throws IOException, InterruptedException {
ConsultaAPI consultaAPI = new ConsultaAPI();
CrearArchivo crearArchivo = new CrearArchivo();
Menu menu = new Menu();
int opcion = menu.obtenerOpcion();
Double valorAConvertir = menu.obtenerValorAConvertir();
String conversor = menu.tipoConversor(opcion);
String[] monedas = conversor.split("/");
String consultaJson = consultaAPI.obtenerDatos(conversor);
Consulta consulta = crearArchivo.JsonToConsulta(consultaJson);
crearArchivo.GuardarEnJson(consulta);
double tasaDeConversion = consulta.conversion_rate();
double valorCovertido = valorAConvertir * tasaDeConversion;
System.out.println("El valor " + valorAConvertir + " " + monedas[0] + " al valor final de =>>> " + valorCovertido + " " + monedas[1]);
}
}
ConsultaAPI
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ConsultaAPI {
private final HttpClient client = HttpClient.newHttpClient();
public String obtenerDatos(String conversor) throws IOException, InterruptedException {
String url = "https://v6.exchangerate-api.com/v6/b65e5067c7dba0040313e381/pair/" + conversor + "/";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("User-Agent", "Java HttpClient")
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString()
);
if (response.statusCode() != 200) {
throw new RuntimeException("Error API: " + response.statusCode());
}
return response.body();
}
}
CrearArchivo
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CrearArchivo {
List<Consulta> consultas = new ArrayList<>();
private static final Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.setPrettyPrinting()
.create();
public Consulta JsonToConsulta(String json) throws IOException {
try {
Consulta consulta = gson.fromJson(json, Consulta.class);
return consulta;
} catch (JsonSyntaxException e) {
throw new RuntimeException("Error parseando JSON: " + e.getMessage(), e);
}
}
public void GuardarEnJson(Consulta consulta) throws IOException {
consultas.add(consulta);
FileWriter escritura = new FileWriter("consultas.json");
escritura.write(gson.toJson(consultas));
escritura.close();
}
}
Menu
import java.util.Scanner;
public class Menu {
private final Scanner scan = new Scanner(System.in);
public int obtenerOpcion() {
int opt = 0;
while (opt != 7){
System.out.println("Conversor de monedas .SAS");
System.out.println("1. Dólar a Peso Argentino");
System.out.println("2. Peso Argentino a Dólar");
System.out.println("3. Dólar a Real Brasileño");
System.out.println("4. Real Brasileño a Dólar");
System.out.println("5. Dólar a Peso Colombiano");
System.out.println("6. Peso Colombiano a Dólar");
System.out.println("7. Salir");
System.out.print("Elije una opción válida: ");
opt = scan.nextInt();
if (opt >= 1 && opt <= 6) {
return opt;
}
else {
break;
}
}
return opt;
}
public Double obtenerValorAConvertir(){
double valorAConvertir = 0.0;
System.out.println("\nIngresa el valor que deseas convertir: ");
valorAConvertir = scan.nextDouble();
return valorAConvertir;
}
public String tipoConversor(int opt){
String tipoConversor = "";
if(opt == 1){
tipoConversor = "USD/ARS";
}else if(opt == 2){
tipoConversor = "ARS/USD";
}else if(opt == 3){
tipoConversor = "USD/BRL";
}else if(opt == 4){
tipoConversor = "USD/BRL";
}else if(opt == 5){
tipoConversor = "USD/COP";
}else if(opt == 6){
tipoConversor = "COP/USD";
}
return tipoConversor;
}
}