Проблема с кодом заключается в том, что он предполагает, что сборщики в унаследованных классах также будут устанавливать родительские свойства. К сожалению, они не делают это из коробки. Тем не менее, это то, что может быть достигнуто с Lombok, но требует некоторого дополнительного кода, как описано в этом post .
Полное решение может выглядеть следующим образом.
Parent Класс
@Getter
@Setter
@JsonDeserialize
@Builder(builderClassName = "VehicleBuilder", builderMethodName = "vehicleBuilder")
public class Vehicle {
private String name;
private String noOfTyres;
}
Дочерний класс
@Getter
@Setter
@JsonDeserialize(builder = Car.CarBuilder.class)
public class Car extends Vehicle {
private String carType;
@Builder
public Car(String name, String noOfTyres, String carType) {
super(name, noOfTyres);
this.carType = carType;
}
@JsonPOJOBuilder(withPrefix = "")
public static class CarBuilder extends VehicleBuilder {
}
}
Обратите внимание, что компоновщик расширяющего класса достигается путем предоставления конструктору аннотации @Builder. Также обратите внимание, что расширяющий класс не устанавливает параметр аннотации toBuilder = true , поскольку для этого потребуется доступ к родительским свойствам, которые являются частными. Это может быть достигнуто путем установки свойств родительского класса для защищенных.