Обновлено 2018-11-10: выпущен Lombok 1.18.4
Для работы Lombok @Builder
и @SuperBuilder
с Джексоном необходимо добавить заголовок класса строителя вручнуюи поместите @JsonPOJOBuilder(withPrefix="")
на него.Затем Lombok сгенерирует только остаток класса строителя.Это необходимо, потому что по умолчанию Джексон использует методы-установщики в качестве префикса «with», а в строителях Lombok нет префикса (а Lombok его нет и, вероятно, никогда не будет настраиваться в этом отношении).
Когда @SuperBuilder
был введен в Lombok 1.18.2, он не был настраиваемым (то есть вы не могли вручную добавить заголовок класса построителя).В результате, использование @SuperBuilder
с Джексоном было не просто возможно.
Это изменилось с Lombok 1.18.4 (см. этот запрос на получение ): @SuperBuilder
теперь (по крайней мере, частично)) настраиваемый, и это позволяет нам добавить аннотацию.Помните, что код, сгенерированный @SuperBuilder
, довольно сложен и сильно загружен обобщениями.Чтобы случайно не испортить код, вам нужно взглянуть на вывод delombok и скопировать / вставить заголовок класса оттуда.Здесь вам нужно добавить заголовок класса реализации компоновщика и добавить к нему аннотацию:
@JsonPOJOBuilder(withPrefix="")
static final class SubABuilderImpl extends SubABuilder<SubA, SubABuilderImpl> {
}
Обратите внимание, что вам нужно расширить видимость SubABuilderImpl
по крайней мере для частного пакета.
Аннотация @JsonDeserialize
должна также ссылаться на класс реализации компоновщика, а не на абстрактный компоновщик:
@JsonDeserialize(builder = SubA.SubABuilderImpl.class)