Part 4: mix-ins registered on the builder
This commit is contained in:
@@ -0,0 +1,48 @@
|
|||||||
|
package com.ankurm.jackson3.part4custom;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import tools.jackson.databind.json.JsonMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Post: Custom Serialisers and Mix-ins — https://ankurm.com/jackson-custom-serializer-mixin/
|
||||||
|
* Section: "Mix-in Annotations — Annotating Third-Party Classes"
|
||||||
|
*
|
||||||
|
* Jackson 3 difference: mixins are registered on the BUILDER (addMixIn), because
|
||||||
|
* mapper.addMixIn(...) does not exist on an immutable mapper.
|
||||||
|
*/
|
||||||
|
public class E04MixinAnnotations {
|
||||||
|
|
||||||
|
/** Stand-in for a third-party class whose source you cannot modify. */
|
||||||
|
public static class Address {
|
||||||
|
public String street;
|
||||||
|
public String city;
|
||||||
|
public String postalCode;
|
||||||
|
public String internalTrackingCode; // must never reach the wire
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Mix-in: carries the annotations Jackson should apply to Address. */
|
||||||
|
public abstract static class AddressMixin {
|
||||||
|
@JsonIgnore public String internalTrackingCode; // suppress
|
||||||
|
@JsonProperty("zip") public String postalCode; // rename
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
JsonMapper mapper = JsonMapper.builder()
|
||||||
|
.addMixIn(Address.class, AddressMixin.class)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Address address = new Address();
|
||||||
|
address.street = "123 Main St";
|
||||||
|
address.city = "Springfield";
|
||||||
|
address.postalCode = "12345";
|
||||||
|
address.internalTrackingCode = "INTERNAL-X99";
|
||||||
|
|
||||||
|
System.out.println("with mixin : " + mapper.writeValueAsString(address));
|
||||||
|
|
||||||
|
// The target class is untouched — a mapper without the mixin still sees
|
||||||
|
// every field under its original name.
|
||||||
|
System.out.println("without mixin: "
|
||||||
|
+ JsonMapper.builder().build().writeValueAsString(address));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user