0Pricing
Java Academy · Lección

Alternativas modernas: JSON y Protocol Buffers

Sustituya la serialización de Java por Jackson JSON y Protocol Buffers para lograr una persistencia portable y segura.

Alternativas modernas: JSON y Protocol Buffers es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

¿Por qué reemplazar la serialización de Java?

La serialización de Java solo funciona en la JVM, es verbosa, lenta y supone un riesgo de seguridad. Las aplicaciones modernas suelen preferir JSON, que es legible para las personas e independiente del lenguaje, o Protocol Buffers, que son compactos, están basados en esquemas y son rápidos.

Jackson: la biblioteca JSON de facto

El ObjectMapper de Jackson convierte objetos en cadenas JSON y viceversa. Añada com.fasterxml.jackson.core:jackson-databind al proyecto.

ObjectMapper mapper = new ObjectMapper();
User user = new User("Alice", 30);
String json = mapper.writeValueAsString(user);
System.out.println(json); // {"name":"Alice","age":30}
User restored = mapper.readValue(json, User.class);

Personalización de Jackson con anotaciones

Use @JsonProperty, @JsonIgnore, @JsonAlias y @JsonFormat para controlar la serialización sin cambiar los nombres de los campos del modelo.

public class Product {
    @JsonProperty("product_name")
    private String name;
    @JsonIgnore
    private String internalCode;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate releaseDate;
}

Módulos de Jackson: compatibilidad con Java Time

Registre JavaTimeModule para serializar correctamente LocalDate, LocalDateTime e Instant, en lugar de obtener un objeto JSON lleno de campos.

ObjectMapper mapper = new ObjectMapper()
    .registerModule(new JavaTimeModule())
    .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String json = mapper.writeValueAsString(LocalDate.now());
System.out.println(json); // "2024-06-15"

GSON como alternativa ligera

GSON, de Google, es más sencillo que Jackson: no requiere configuración para los tipos básicos, pero carece de la riqueza de anotaciones y del rendimiento de Jackson a gran escala.

Gson gson = new Gson();
String json = gson.toJson(new User("Bob", 25));
User user = gson.fromJson(json, User.class);

¿Qué son los Protocol Buffers?

Protocol Buffers (Protobuf) es el formato de serialización binaria de Google. Defina un esquema .proto, compílelo para generar clases Java y obtendrá mensajes compactos con control de versiones integrado.

// user.proto
syntax = "proto3";
message UserProto {
    string name = 1;
    int32  age  = 2;
}

Codificación de un mensaje Protobuf

Las clases generadas tienen una API de builder. Llame a toByteArray() para obtener la carga útil binaria y a parseFrom(bytes) para decodificarla.

UserProto user = UserProto.newBuilder()
    .setName("Alice")
    .setAge(30)
    .build();
byte[] bytes = user.toByteArray();
UserProto restored = UserProto.parseFrom(bytes);
System.out.println(restored.getName());

Ventajas y desventajas de JSON frente a Protobuf

JSON es legible para las personas y no requiere un esquema; Protobuf es entre 3 y 10 veces más pequeño y rápido, pero requiere un esquema y generación de código. Elija JSON para las API REST y Protobuf para los servicios internos de alto rendimiento.

Evolución de esquemas con Protobuf

Los campos de Protobuf se identifican mediante números, no nombres. Puede añadir campos nuevos u obsoletar los antiguos de forma segura sin romper los clientes existentes, siempre que no reutilice nunca los números de campo.

// v2 of user.proto — backwards compatible
message UserProto {
    string name  = 1;
    int32  age   = 2;
    string email = 3; // new in v2
}

Migración desde la serialización de Java

Reemplace las rutas de escritura de ObjectOutputStream por ObjectMapper.writeValue() o por writeTo() de Protobuf. Conserve la serialización anterior únicamente para migrar datos heredados.

Seguridad: no hay gadgets de deserialización

JSON y Protobuf no llaman a constructores ni métodos arbitrarios durante la deserialización, lo que elimina los ataques de cadenas de gadgets que afectan a la serialización de Java.

Comprobación rápida

¿Cuál es una ventaja clave de Protocol Buffers frente a JSON?

Repaso

Reemplace la serialización de Java por JSON de Jackson para API REST y legibilidad, o por Protocol Buffers para servicios críticos para el rendimiento. Ambos funcionan entre lenguajes, permiten evolucionar el esquema y son seguros por diseño.

Preguntas frecuentes

¿La lección «Alternativas modernas: JSON y Protocol Buffers» es gratis?

Sí — el texto completo de «Alternativas modernas: JSON y Protocol Buffers» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Alternativas modernas: JSON y Protocol Buffers»?

Sustituya la serialización de Java por Jackson JSON y Protocol Buffers para lograr una persistencia portable y segura. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Alternativas modernas: JSON y Protocol Buffers»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Fundamentos de la serialización en Java
  2. Campos transient y serialVersionUID
  3. Serialización personalizada: writeObject y readObject
  4. Alternativas modernas: JSON y Protocol Buffers
← Volver a Java Academy