Jakarta JSON Binding (JSON-B) en Quarkus: Serialización Automática
Introducción
Jakarta JSON Binding (JSON-B) proporciona una forma estándar de serializar y deserializar objetos Java a/desde JSON. En Quarkus, JSON-B está completamente integrado y funciona automáticamente en endpoints REST.
¿Qué es JSON-Binding?
JSON-Binding permite convertir objetos Java a JSON y viceversa usando anotaciones declarativas. Quarkus lo usa automáticamente en endpoints REST, pero también puedes usarlo manualmente cuando necesites más control.
Serialización Automática en REST
La forma más simple de usar JSON-B en Quarkus es simplemente retornar objetos Java en endpoints REST:
@GET
@Path("/heroes")
public Response getAllHeroes() {
List<Hero> heroes = heroService.findAll();
return Response.ok(heroes).build(); // Se serializa automáticamente
}
@POST
@Path("/heroes")
public Response createHero(Hero hero) {
// 'hero' ya está deserializado desde JSON automáticamente
Hero created = heroService.create(hero);
return Response.ok(created).build(); // Se serializa automáticamente
}
Anotaciones JSON-B
@JsonbProperty
Renombra campos en JSON:
public class Team {
@JsonbProperty("team_id")
private Long id;
@JsonbProperty("team_name")
private String name;
}
@JsonbTransient
Excluye campos de la serialización:
public class Team {
@JsonbTransient
private String internalNotes; // No aparece en JSON
}
@JsonbDateFormat
Formatea fechas:
public class Team {
@JsonbProperty("formation_date")
@JsonbDateFormat("yyyy-MM-dd")
private LocalDate formationDate;
}
@JsonbPropertyOrder
Ordena campos en JSON:
@JsonbPropertyOrder({"role", "hero_name", "power_level"})
public class TeamMember {
@JsonbProperty("hero_name")
private String heroName;
@JsonbProperty("power_level")
private Integer powerLevel;
}
Custom Adapters
Los adapters permiten convertir tipos complejos:
@JsonbTypeAdapter(PowerLevelAdapter.class)
private Integer powerLevel;
public class PowerLevelAdapter implements JsonbAdapter<Integer, PowerLevelDTO> {
@Override
public PowerLevelDTO adaptToJson(Integer powerLevel) {
PowerLevelDTO dto = new PowerLevelDTO();
dto.value = powerLevel;
dto.category = categorizePowerLevel(powerLevel);
dto.description = getPowerDescription(powerLevel);
return dto;
}
@Override
public Integer adaptFromJson(PowerLevelDTO dto) {
return dto.value;
}
}
Configuración Personalizada
Puedes configurar Jsonb con opciones personalizadas:
JsonbConfig config = new JsonbConfig()
.withPropertyOrderStrategy(PropertyOrderStrategy.LEXICOGRAPHICAL)
.withNullValues(true)
.withFormatting(true);
Jsonb jsonb = JsonbBuilder.create(config);
String json = jsonb.toJson(team);
Serialización Manual
Cuando necesitas control total:
// Serializar
Jsonb jsonb = JsonbBuilder.create();
String json = jsonb.toJson(team);
// Deserializar
Team team = jsonb.fromJson(json, Team.class);
Objetos Anidados y Colecciones
JSON-B maneja automáticamente objetos anidados y colecciones:
public class Team {
@JsonbProperty("members")
private List<TeamMember> members;
@JsonbProperty("headquarters")
private Location headquarters;
}
Ejemplo Completo
Nuestro demo muestra:
Serialización/deserialización automática en REST
Anotaciones @JsonbProperty, @JsonbTransient, @JsonbDateFormat
Custom adapters para conversiones complejas
Configuración personalizada de Jsonb
Objetos anidados y colecciones
Ventajas en Quarkus
Automático: Funciona sin configuración adicional
Integrado: Serialización automática en REST endpoints
Flexible: Anotaciones y adapters para casos complejos
Performance: Serialización eficiente
Conclusión
JSON-Binding en Quarkus hace que trabajar con JSON sea extremadamente simple. La serialización automática elimina mucho código boilerplate, y las anotaciones proporcionan control cuando lo necesitas.




