1
0

Part 4: custom serialiser on the real Jackson 3 StdSerializer signature

This commit is contained in:
2026-08-04 17:31:28 +00:00
parent 22d59d0f7c
commit f487566ae0

View File

@@ -0,0 +1,38 @@
package com.ankurm.jackson3.part4custom;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.SerializationContext;
import tools.jackson.databind.ser.std.StdSerializer;
import java.math.RoundingMode;
/**
* Post: Custom Serialisers and Mix-ins — https://ankurm.com/jackson-custom-serializer-mixin/
* Section: "Writing a Custom Serialiser"
*
* Three Jackson 3 differences from the code in the post:
* 1. Package is tools.jackson.databind.ser.std, not com.fasterxml.jackson...
* 2. The third parameter is SerializationContext, not SerializerProvider.
* 3. There is no `throws IOException` — JacksonException is unchecked in Jackson 3.
*
* (StdSerializer still exists under its old name; only JsonSerializer was renamed,
* to ValueSerializer. StdSerializer extends ValueSerializer.)
*/
public class E01MoneyValueSerializer extends StdSerializer<Money> {
public E01MoneyValueSerializer() {
super(Money.class);
}
@Override
public void serialize(Money moneyValue, JsonGenerator jsonGenerator, SerializationContext ctxt) {
jsonGenerator.writeStartObject();
// Write the amount rounded to 2 decimal places
jsonGenerator.writeNumberProperty("amount",
moneyValue.amount().setScale(2, RoundingMode.HALF_UP));
// Write the ISO currency code in uppercase
jsonGenerator.writeStringProperty("currency",
moneyValue.currencyCode().toUpperCase());
jsonGenerator.writeEndObject();
}
}