Я хотел бы объединить преобразователи MapStruct с моделью преобразования Spring. Поэтому я объявляю каждый интерфейс Mapper расширением Spring Converter:
Код: Выделить всё
@Mapper
public interface CarMapper extends Converter {
@Override
CarDto convert(Car car);
}
Код: Выделить всё
class CarWarehouse {
@Autowired
private ConversionService conversionService;
...
public CarDto getCarInformation(Car car) {
return conversionService.convert(car, CarDto.class);
}
}
Код: Выделить всё
@Mapper(uses=ConversionService.class)
public interface ParentMapper extends Converter
Код: Выделить всё
@Mapper(uses={ChildMapper1.class, ChildMapper2.class, ChildMapper3.class})
public interface ParentMapper extends Converter
Изменить
Раз уж нас спросили, предположим, что у меня есть CarMapper, определенный, как указано выше, с типами Car и CarDto, имеющими атрибут Wheel. типа Wheel и WheelDto соответственно. Тогда я хотел бы иметь возможность определить другой Mapper следующим образом:
Код: Выделить всё
@Mapper
public interface WheelMapper extends Converter {
@Override
WheelDto convert(Wheel wheel);
}
Код: Выделить всё
@Mapper(uses = WheelMapper.class)
public interface CarMapper extends Converter
Однако мне бы хотелось, чтобы сгенерированный код выглядел примерно так:
Код: Выделить всё
@Component
public class CarMapperImpl implements CarMapper {
@Autowired
private ConversionService conversionService;
@Override
public CarDto convert(Car car) {
CarDto carDto = new CarDto();
carDto.setWheel(conversionService.convert(car.getWheel(), WheelDto.class);
return carDto;
}
}
Источник: https://stackoverflow.com/questions/580 ... e-possible