Part 4: custom serialiser on the real Jackson 3 StdSerializer signature
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user