Я хотел бы объединить преобразователи 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
Программисты JAVA общаются здесь
1710417142
Гость
Я хотел бы объединить преобразователи 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
Есть ли способ добиться этого?
[b]Изменить[/b]
Раз уж нас спросили, предположим, что у меня есть 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;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/58081224/mapstruct-mapper-as-spring-framework-converter-idiomatic-use-possible[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия