Modifier la sérialisation Json avec Jackson

      1 min de lecture  

Lors de la mise en place d’un webservice REST Json via Jersey et Jackson, il est souvent nécessaire de modifier la façon dont sont sérialisées certaines valeurs.

Par exemple, lorsque l’on veut afficher une valeur monétaire représentée par un BigDecimal, il faut créer une classe qui surcharge la classe JsonSerializer, et faire référence à cette classe via une annotation sur la propriété du bean à sérialiser.

public class MoneySerializer extends JsonSerializer<BigDecimal> {

    @Override
    public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator,
                          SerializerProvider serializerProvider)
            throws IOException, JsonProcessingException {

        if (bigDecimal == null) {
            jsonGenerator.writeNull();
            return;
        }
        jsonGenerator.writeString(bigDecimal.setScale(2, RoundingMode.HALF_UP).toString());
    }
}

    @javax.persistence.Column(name = "AQ_GAINS")
    @JsonSerialize(using = MoneySerializer.class)
    @Basic
    public BigDecimal getGains() {
        return gains;
    }