@Jacksonized
Bob, meet Jackson. Lets make sure you become fast friends.
@Jacksonized was introduced as experimental feature for @Builder and @SuperBuilder in lombok v1.18.14.
Support for @Accessors was added in lombok v1.18.40.
Overview
The @Jacksonized annotation is an add-on annotation for @Builder, @SuperBuilder, and @Accessors.
For @Accessors(fluent = true) on a type, it automatically configures Jackson to use the generated setters and getters for (de-)serialization by inserting @JsonProperty annotations.
(Note that @Jacksonized @Accessors on fields are not supported.)
@Jacksonized @Accessors(fluent = true)
@Getter @Setter
public class AccessorsExample {
private int age = 10;
}
For @Builder and @SuperBuilder, it automatically configures the generated builder class to be used by Jackson's deserialization.
It only has an effect if present at a context where there is also a @Builder or a @SuperBuilder; a warning is emitted otherwise.
Without @Jacksonized, you would have to customize your builder class(es).
With @Jacksonized, you can simply write something like this to let Jackson use the generated builder:
@Jacksonized @Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public class JacksonExample {
private List<Foo> foos;
}
This annotation does not change the behavior of the generated builder.
A @Jacksonized @SuperBuilder remains fully compatible to regular @SuperBuilders.
Small print
In particular, the annotation does the following for @(Super)Builder:
-
Configure Jackson to use the builder for deserialization using
@JsonDeserialize(builder=Foobar.FoobarBuilder[Impl].class))on the class (where Foobar is the name of the annotated class, andImplis added for@SuperBuilder). (An error is emitted if such an annotation already exists.) -
Copy Jackson-related configuration annotations (like
@JsonIgnoreProperties) from the class to the builder class. This is necessary so that Jackson recognizes them when using the builder. -
Insert
@JsonPOJOBuilder(withPrefix="")on the generated builder class to override Jackson's default prefix "with". If you configured a different prefix in lombok usingsetterPrefix, this value is used. If you changed the name of thebuild()method usingbuildMethodName, this is also made known to Jackson. -
For
@SuperBuilder, make the builder implementation class package-private.