Spring & mapstruct,使用参数化构造函数生成映射器?



Mapstruct始终生成使用默认空构造函数和setter来构造对象的映射器。

我需要mapstruct来使用参数化构造函数来构造对象。

我使用mapstruct:配置了这个映射器

@Mapper(componentModel = "spring")
public interface FlightMapper {
FlightBooking  flightBookingPostRequestDtoToFlightBooking(FlightBookingPostRequestDto flightBookingDto);
}

mapstruct生成的实现使用不带参数的默认构造函数:

public FlightBooking flightBookingPostRequestDtoToFlightBooking(FlightBookingPostRequestDto     flightBookingDto) {
if ( flightBookingDto == null ) {
return null;
}
FlightBooking flightBooking = new FlightBooking();
flightBooking.setFlight_booking_id( flightBookingDto.getBooking_id() );
return flightBooking;
}

但我需要这个带有参数化构造函数的实现:

public FlightBooking flightBookingPostRequestDtoToFlightBooking(FlightBookingPostRequestDto    flightBookingDto) {
if ( flightBookingDto == null ) {
return null;
}
FlightBooking flightBooking = new FlightBooking(flightBookingDto.getBooking_id());
return flightBooking;
}

如何配置mapstruct来实现这一点?我没有在官方文件中找到任何回复。提前感谢

自1.4版本以来,MapStruct支持在实例化映射目标时使用构造函数。

一种解决方案是将参数化构造函数标记为@Default。有关构造函数支持如何工作的更多可能的解决方案和详细信息,请参阅参考指南。

ObjectFactory是一条不错的选择。

默认情况下,在映射过程中使用默认构造函数。如果返回类型为存在可分配给所需对象类型的,则工厂方法。

可以在没有参数的情况下使用@TargetType定义工厂方法参数,@Context参数,或与映射源参数一起使用。如果定义了这些参数中的任何一个,那么应该使用factory方法。需要用可分配的结果类型、可分配的上下文参数和/或可分配的源类型。

我留给你阅读文档并解决问题的乐趣:(

最新更新