# S03 — Custom serialiser and deserialiser renames Guide: ("Custom Serializers and Deserializers: Class Renames") [`before/S03CustomHandlers.java`](../jackson2-before/src/main/java/com/ankurm/migration/before/S03CustomHandlers.java) · [`after/S03CustomHandlers.java`](../jackson3-after/src/main/java/com/ankurm/migration/after/S03CustomHandlers.java) If your project has custom handlers, this is where the upgrade time goes. Every item below is a compile error until fixed. | Jackson 2 | Jackson 3 | |---|---| | `JsonSerializer` | `ValueSerializer` | | `JsonDeserializer` | `ValueDeserializer` | | `SerializerProvider` | `SerializationContext` | | `throws IOException` | remove — unchecked now | | `gen.writeNumberField(...)` | `gen.writeNumberProperty(...)` | | `gen.writeStringField(...)` | `gen.writeStringProperty(...)` | | `p.getCodec().readTree(p)` | `ctxt.readTree(p)` | | `new SimpleModule(name, Version)` | `new SimpleModule(name)` | | `mapper.registerModule(m)` | `builder.addModule(m)` | ## Output **Jackson 2 — `jackson2-before`** ``` serialised : {"amount":19.99,"currency":"USD"} deserialised : Money[amount=20.0, currencyCode=USD] base classes : com.fasterxml.jackson.databind.JsonSerializer / com.fasterxml.jackson.databind.JsonDeserializer ``` **Jackson 3 — `jackson3-after`** ``` serialised : {"amount":19.99,"currency":"USD"} deserialised : Money[amount=20.0, currencyCode=USD] base classes : tools.jackson.databind.ValueSerializer / tools.jackson.databind.ValueDeserializer ``` Identical JSON on both sides; only the base class names differ. That is the useful result — this is a mechanical rename, not a behavioural change, so it is safe to do in bulk with OpenRewrite and review as a diff.