@Jacksonized
Bob,認識一下 Jackson。讓我們確保你們成為好朋友。
@Jacksonized
在 lombok v1.18.14 中作為實驗性功能引入。
總覽
@Jacksonized
註解是 @Builder
和 @SuperBuilder
的附加註解。它會自動配置產生的 builder 類別,以便 Jackson 的反序列化使用。只有在同時存在 @Builder
或 @SuperBuilder
的情況下才會生效;否則會發出警告。
如果沒有 @Jacksonized
,您必須自訂您的 builder 類別。有了 @Jacksonized
,您可以簡單地這樣寫,讓 Jackson 使用產生的 builder
@Jacksonized @Builder @JsonIgnoreProperties(ignoreUnknown = true) public class JacksonExample { private List<Foo> foos; }
此註解不會更改產生的 builder 的行為。@Jacksonized
@SuperBuilder
仍然與常規 @SuperBuilder
完全相容。
細則
具體來說,此註解會執行以下操作
- 配置 Jackson 以使用 builder 進行反序列化,方法是在類別上使用
@JsonDeserialize(builder=Foobar.FoobarBuilder[Impl].class))
(其中 Foobar 是註解類別的名稱,而Impl
是為@SuperBuilder
添加的)。(如果此類註解已存在,則會發出錯誤。) - 將 Jackson 相關的配置註解(例如
@JsonIgnoreProperties
)從類別複製到 builder 類別。這是必要的,以便 Jackson 在使用 builder 時識別它們。 - 在產生的 builder 類別上插入
@JsonPOJOBuilder(withPrefix="")
,以覆蓋 Jackson 的預設前綴 "with"。如果您在 lombok 中使用setterPrefix
配置了不同的前綴,則會使用此值。如果您使用buildMethodName
更改了build()
方法的名稱,這也會告知 Jackson。 - 對於
@SuperBuilder
,使 builder 實作類別成為 package-private。