Here below is the logic I need to implement my converter:
@AllArgsConstructor
@Service
public interface VehicleConverter {
private final BicycleConverter bicycleConderer;
private final CarConverer carConverter;
private final PlaneConverer planeConverter;
default Vehicle convert(final VehicleDTD vehicle) {
if (!vehicle.hasMotor() && vehicle.power != ZERO) {
throw new PowerCanBeSpecifiedOnlyForVehiclesWithMotor();
}
return switch(vechicle.getType) {
BICYLCE -> bicycleConverter.convert(vehicle);
CAR -> carConverter.convert(vehicle);
PLANE-> planeConverter.covert(vehicle);
default -> null;
}
}
}
Class Vehicle
has several specialized subclasses, one for each supported vehicle type. Each vehicle has its own Mapper
… and I’d like to have something like this:
@Mapper(componentModel = "spring",
uses={BicycleConverter.class, CarConverter.class, PlaneConverter.class})
public interface VehicleConverter {
/*
Is it possible to let MapStruct use the correct specialized converter
depending on `vehicle.type`?
*/
Vehicle convert(final VehicleDTD vehicle);
@BeforeMapping
default void checkVehicle(final VehicleDTD vehicle) {
if (!vehicle.hasMotor() && vehicle.power != ZERO) {
throw new PowerCanBeSpecifiedOnlyForVehiclesWithMotor();
}
}
}
Given the new version here above, is it possible to let MapStruct use the correct specialized converter depending on vehicle.type
?