API REST - mdiago/VeriFactu GitHub Wiki
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class VerifactuApiPostExample {
public static void main(String[] args) {
// URL del endpoint
String endpoint = "https://facturae.irenesolutions.com:8050/Kivu/Taxes/Verifactu/Invoices/GetQrCode";
// Cuerpo de la solicitud (JSON)
String requestBody = """
{
"ServiceKey": "your service key",
"InvoiceID": "FRTEST1734699642488",
"InvoiceDate": "2024-12-20T13:00:42.488Z",
"SellerID": "B12959755",
"CompanyName": "IRENE SOLUTIONS SL",
"TaxItems": [
{
"TaxBase": 11.99,
"TaxAmount": 2.52
}
]
}
""";
try {
// Crear cliente HTTP
HttpClient client = HttpClient.newHttpClient();
// Construir la solicitud
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(endpoint))
.header("Content-Type", "application/json") // Tipo de contenido
.POST(HttpRequest.BodyPublishers.ofString(requestBody)) // Método POST con el cuerpo
.build();
// Enviar la solicitud y obtener la respuesta
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// Manejar la respuesta
if (response.statusCode() == 200) {
System.out.println("Respuesta exitosa:");
System.out.println(response.body());
} else {
System.out.println("Error en la llamada: " + response.statusCode());
System.out.println("Detalle: " + response.body());
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error al realizar la solicitud.");
}
}
}
Para deserializar el JSON en un objeto dinámico en Java, puedes usar bibliotecas como Jackson o Gson, que son populares y sencillas de usar.
A continuación, se muestra cómo hacerlo con Jackson, ya que permite trabajar fácilmente con objetos dinámicos.
Primero, asegúrate de incluir la dependencia de Jackson en tu archivo Maven (pom.xml) o Gradle:
Maven:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
Gradle:
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
Código para Deserializar JSON en un Objeto Dinámico
Aquí tienes un ejemplo de cómo deserializar el JSON recibido en un objeto dinámico utilizando ObjectMapper de Jackson:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonDeserializationExample {
public static void main(String[] args) {
// JSON como cadena (puedes obtenerlo desde una respuesta HTTP)
String json = """
{
"ServiceKey": "your service key",
"InvoiceID": "FRTEST1734699642488",
"InvoiceDate": "2024-12-20T13:00:42.488Z",
"SellerID": "B12959755",
"CompanyName": "IRENE SOLUTIONS SL",
"TaxItems": [
{
"TaxBase": 11.99,
"TaxAmount": 2.52
}
]
}
""";
try {
// Crear instancia de ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
// Deserializar JSON en un objeto dinámico (JsonNode)
JsonNode rootNode = objectMapper.readTree(json);
// Acceder a los campos del JSON
String serviceKey = rootNode.get("ServiceKey").asText();
String invoiceId = rootNode.get("InvoiceID").asText();
String invoiceDate = rootNode.get("InvoiceDate").asText();
String sellerId = rootNode.get("SellerID").asText();
String companyName = rootNode.get("CompanyName").asText();
System.out.println("ServiceKey: " + serviceKey);
System.out.println("InvoiceID: " + invoiceId);
System.out.println("InvoiceDate: " + invoiceDate);
System.out.println("SellerID: " + sellerId);
System.out.println("CompanyName: " + companyName);
// Acceder a los elementos de la lista TaxItems
JsonNode taxItemsNode = rootNode.get("TaxItems");
for (JsonNode item : taxItemsNode) {
double taxBase = item.get("TaxBase").asDouble();
double taxAmount = item.get("TaxAmount").asDouble();
System.out.println("TaxBase: " + taxBase);
System.out.println("TaxAmount: " + taxAmount);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error al deserializar el JSON.");
}
}
}