CurrencyAmountCentsSerializer.java

package com.tdmconsult.ete.utils;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.jspecify.annotations.Nullable;

public class CurrencyAmountCentsSerializer extends JsonSerializer<Object> {

    @Setter
    @Accessors(chain = true)
    private @Nullable String fieldNameOverride;

    @Override
    public void serialize(
            final Object value,
            final JsonGenerator gen,
            final SerializerProvider serializers) throws IOException {

        if (value == null) {
            gen.writeNull();
            return;
        }

        BigDecimal decimalValue = (BigDecimal) value;
        long cents = decimalValue.multiply(BigDecimal.valueOf(100))
                .setScale(0, RoundingMode.HALF_UP)
                .longValue();

        if (fieldNameOverride != null) {
            gen.writeFieldName(fieldNameOverride);
        }
        gen.writeNumber(cents);
    }
}