Skip to main content

Command Palette

Search for a command to run...

Jakarta JSON Binding (JSON-B) en Quarkus: Serialización Automática

Updated
3 min read

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

  1. Automático: Funciona sin configuración adicional

  2. Integrado: Serialización automática en REST endpoints

  3. Flexible: Anotaciones y adapters para casos complejos

  4. 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.

Recursos

More from this blog

JoeDayz

53 posts

Community Guy | Java Champion | AWS Architect | Software Architect