Я хотел бы объединить преобразователи MapStruct с моделью преобразования Spring. Поэтому я объявляю каждый интерфейс Mapper расширением Spring Converter:
@Mapper
public interface CarMapper extends Converter {
@Override
CarDto convert(Car car);
}
Затем я могу использовать компоненты сопоставления, внедрив стандартный ConversionService:
class CarWarehouse {
@Autowired
private ConversionService conversionService;
...
public CarDto getCarInformation(Car car) {
return conversionService.convert(car, CarDto.class);
}
}
Это прекрасно работает, но мне интересно, есть ли способ избежать внедрения одних картографов в другие напрямую через атрибут use. Я хотел бы указать картографу использовать ConversionService для использования другого картографа. Однако, поскольку метод Convert ConversionService не соответствует стандартному шаблону MapStruct для метода сопоставления, подключаемый модуль генерации кода не распознает, что он может использовать этот сервис при поиске подотображения. По сути, я хочу писать
@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:
@Mapper(uses = WheelMapper.class)
public interface CarMapper extends Converter
Что затем даст сгенерированному CarMapperImpl элемент @Autowired типа WheelMapper, который будет вызываться для сопоставления колесо атрибутов.
Однако мне бы хотелось, чтобы сгенерированный код выглядел примерно так:
@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
MapStruct Mapper как конвертер Spring Framework – возможно ли идиоматическое использование? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
MapStruct Mapper как конвертер Spring Framework – возможно ли идиоматическое использование?
Anonymous » » в форуме JAVA - 0 Ответы
- 42 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Mapstruct Mapper создает NullPointerException, потому что Mapper AutoWailired is null
Anonymous » » в форуме JAVA - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Mapstruct Mapper создает NullPointerException, потому что Mapper AutoWailired is null
Anonymous » » в форуме JAVA - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-