diff options
-rw-r--r-- | doc/changelog.markdown | 3 | ||||
-rw-r--r-- | website/templates/features/experimental/Jacksonized.html | 53 | ||||
-rw-r--r-- | website/templates/features/experimental/index.html | 4 |
3 files changed, 59 insertions, 1 deletions
diff --git a/doc/changelog.markdown b/doc/changelog.markdown index 04a81cd1..9f0e2242 100644 --- a/doc/changelog.markdown +++ b/doc/changelog.markdown @@ -1,13 +1,14 @@ Lombok Changelog ---------------- -### v.18.13 "Edgy Guinea Pig" +### v1.18.13 "Edgy Guinea Pig" * BREAKING CHANGE: mapstruct users should not add a dependency to lombok-mapstruct-binding. This solves compiling modules with lombok (and mapstruct). * FEATURE: Similar to `@Builder`, you can now configure a `@SuperBuilder`'s 'setter' prefixes via `@SuperBuilder(setterPrefix = "set")` for example. We still discourage doing this. [Pull Request #2357](https://github.com/rzwitserloot/lombok/pull/2357). * FEATURE: If using `@Synchronized("lockVar")`, if `lockVar` is referring to a static field, the code lombok generates no longer causes a warning about accessing a static entity incorrectly. [Issue #678](https://github.com/rzwitserloot/lombok/issues/678) * BUGFIX: Using `@SuperBuilder` on a class that has some fairly convoluted generics usage would fail with 'Wrong number of type arguments'. [Issue #2359](https://github.com/rzwitserloot/lombok/issues/2359) [Pull Request #2362](https://github.com/rzwitserloot/lombok/pull/2362) * BUGFIX: Various lombok annotations on classes nested inside enums or interfaces would cause errors in eclipse. [Issue #2369](https://github.com/rzwitserloot/lombok/issues/2369) * BUGFIX: Trying to add `@ExtensionMethod`s with exactly 2 arguments would fail in eclipse. [Issue #1441](https://github.com/rzwitserloot/lombok/issues/1441) [Pull Request #2376](https://github.com/rzwitserloot/lombok/pull/2376) thanks to __@Rawi01__. +* FEATURE: `@Jacksonized` on a `@Builder` or `@SuperBuilder` will configure [Jackson](https://github.com/FasterXML/jackson) to use this builder when deserializing. [Pull Request #2387](https://github.com/rzwitserloot/lombok/pull/2387). [@Jacksonized documentation](https://projectlombok.org/features/experimental/Jacksonized). ### v1.18.12 (February 1st, 2020) * PLATFORM: Support for JDK13 (including `yield` in switch expressions, as well as delombok having a nicer style for arrow-style switch blocks, and text blocks). diff --git a/website/templates/features/experimental/Jacksonized.html b/website/templates/features/experimental/Jacksonized.html new file mode 100644 index 00000000..fd2bfe68 --- /dev/null +++ b/website/templates/features/experimental/Jacksonized.html @@ -0,0 +1,53 @@ +<#import "../_features.html" as f> + +<@f.scaffold title="@Jacksonized" logline="Make Jackson use your builders."> + <@f.history> + <p> + <code>@Jacksonized</code> was introduced as experimental feature in lombok v1.18.14. + </p> + </@f.history> + + <@f.overview> + <p> + The <code>@Jacksonized</code> annotation is an add-on annotation for <a href="/features/Builder"><code>@Builder</code></a> and <a href="/features/experimental/SuperBuilder"><code>@SuperBuilder</code></a>. + It automatically configures the generated builder class to be used by <a href="https://github.com/FasterXML/jackson">Jackson</a>'s deserialization. + It only has an effect if present at a context where there is also a <code>@Builder</code> or a <code>@SuperBuilder</code>; a warning is emitted otherwise. + </p><p> + Without <code>@Jacksonized</code>, you would have to customize your builder class(es). + With <code>@Jacksonized</code>, you can simply write something like this to let Jackson use the generated builder:<div class="snippet"><div class="java" align="left"><pre> +@Jacksonized @Builder +@JsonIgnoreProperties(ignoreUnknown = true) +public class JacksonExample { + private List<Foo> foos; +} +</pre></div></div> + </p><p> + This annotation is especially useful when deserializing into immutable (sub-)classes that only use <code>@SuperBuilder</code> to create instances. + With <code>@Jacksonized</code>, you do not have to put the complex <code>@SuperBuilder</code> class header into your code just to configure it for Jackson. + </p><p> + This annotation does <i>not</i> change the behavior of the generated builder. + A <code>@Jacksonized</code> <code>@SuperBuilder</code> remains fully compatible to regular <code>@SuperBuilder</code>s. + </p> + </@f.overview> + + <@f.smallPrint> + <p> + In particular, the annotation does the following: + <ul> + <li> + Configure Jackson to use the builder for deserialization using <code>@JsonDeserialize(builder=<em>Foobar</em>.<em>Foobar</em>Builder[Impl].class))</code> on the class (where <em>Foobar</em> is the name of the annotated class). + (An error is emitted if such an annotation already exists.) + </li><li> + Copy Jackson-related configuration annotations (like <code>@JsonIgnoreProperties</code>) from the class to the builder class. + This is necessary so that Jackson recognizes them when using the builder. + </li><li> + Insert <code>@JsonPOJOBuilder(withPrefix="")</code> on the generated builder class to override Jackson's default prefix "with". + If you configured a different prefix in lombok using <code>setterPrefix</code>, this value is used. + If you changed the name of the <code>build()</code> method using using <code>buildMethodName</code>, this is also made known to Jackson. + </li><li> + For <code>@SuperBuilder</code>, make the builder implementation class package-private. + </li> + </ul> + </p> + </@f.smallPrint> +</@f.scaffold> diff --git a/website/templates/features/experimental/index.html b/website/templates/features/experimental/index.html index b158d381..dc7870cf 100644 --- a/website/templates/features/experimental/index.html +++ b/website/templates/features/experimental/index.html @@ -71,6 +71,10 @@ <@main.feature title="@Tolerate" href="Tolerate"> Skip, jump, and forget! Make lombok disregard an existing method or constructor. </@main.feature> + + <@main.feature title="@Jacksonized" href="Jacksonized"> + Make Jackson use your builders. + </@main.feature> </div> <@f.confKeys> |