Ломбок не создает конструктор по умолчанию, что приводит к сбою привязки данных jackson

у меня ПОЖО

@Data
@AllArgsConstrcutor
class Test {

T field1,
T field2,
}

Когда я пытаюсь десериализовать его с помощью jackson-databind 2.9.3, это

сбой com.fasterxml.jackson.databind.exc.InvalidDefinitionException: не удается создать экземпляр com.mypackage.Test (не существует создателей, таких как конструкция по умолчанию): невозможно десериализовать из значения объекта (без делегата или создателя на основе свойств) в [Источник: (строка )


person Sakalya    schedule 25.10.2018    source источник
comment
Вы также должны использовать аннотацию @NoArgsConstructor в верхней части вашего класса.   -  person GauravRai1512    schedule 25.10.2018
comment
Это работало нормально, пока я не обновил ломбок до 1.16.22.   -  person Sakalya    schedule 25.10.2018
comment
@Sakalya, попробуйте последнюю версию ломбока 1.18.2, должно работать нормально, если в 1.16.22 есть ошибка. Кроме того, он обратно совместим, так что не беспокойтесь.   -  person dkb    schedule 25.10.2018


Ответы (2)


@AllArgsConstructor создает конструктор с аргументом для каждого поля класса (так что в вашем случае вы получите Test(T, T)).

Для конструктора по умолчанию вы должны добавить аннотацию @NoArgsConstructor:

@Data
@AllArgsConstrcutor // Won't be used by Jackson, but there's no harm in it, per-se
@NoArgsConstructor // Here!
class Test {
    T field1;
    T field2;
}
person Mureinik    schedule 25.10.2018
comment
Это работало нормально, пока я не обновил ломбок до 1.16.22. - person Sakalya; 25.10.2018

Конечно, Lombok не создает конструктор по умолчанию.

С: @AllArgsConstrcutor вы говорите, что хотите создать конструктор со всеми предоставленными параметрами. Поскольку POJO сам по себе нуждается только в одном конструкторе, это будет так.

Если вы хотите создать конструктор по умолчанию, добавьте это: @NoArgsConstructor

person Stultuske    schedule 25.10.2018
comment
Это работало нормально, пока я не обновил ломбок до 1.16.22. - person Sakalya; 25.10.2018
comment
@Сакалия нет, не было. Увидев, что вы неправильно написали AllArgsConstructor, ваш код даже не скомпилируется, не говоря уже о запуске и создании конструкторов, которых он не должен. Это также не единственная проблема в этом файле Java, которая препятствует компиляции. - person Stultuske; 25.10.2018
comment
Это просто опечатка - person Sakalya; 25.10.2018