MapStruct Mapper как конвертер Spring Framework – возможно ли идиоматическое использование?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 MapStruct Mapper как конвертер Spring Framework – возможно ли идиоматическое использование?

Сообщение Гость »


Я хотел бы объединить преобразователи 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»