如何配置Spring集成的MapStruct使用带参构造器生成映射类?
让MapStruct使用带参构造器生成映射实现的方法
要让MapStruct生成代码时调用目标类的带参构造器,而非无参构造器+setter,可按以下方式配置:
1. 确保目标类存在对应带参构造器
首先你的FlightBooking类必须包含接收对应参数的构造器,示例如下:
public class FlightBooking { private Long flight_booking_id; // 定义匹配需求的带参构造器 public FlightBooking(Long flight_booking_id) { this.flight_booking_id = flight_booking_id; } // 可保留无参构造器,但MapStruct会优先匹配符合映射规则的带参构造器 }
2. 显式配置字段映射关系(处理字段名不匹配场景)
由于你的DTO字段是booking_id,目标类字段是flight_booking_id,需通过@Mapping注解明确映射关系,MapStruct会自动关联到对应构造器参数:
@Mapper(componentModel = "spring") public interface FlightMapper { @Mapping(target = "flight_booking_id", source = "booking_id") FlightBooking flightBookingPostRequestDtoToFlightBooking(FlightBookingPostRequestDto flightBookingDto); }
3. 编译时保留参数名(针对MapStruct 1.3及以下版本)
如果使用低版本MapStruct,需要确保编译时保留构造器参数名,让MapStruct能识别参数对应关系。以Maven为例,在编译插件中添加配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <!-- 对应你的JDK版本 --> <target>1.8</target> <compilerArgs> <arg>-parameters</arg> </compilerArgs> </configuration> </plugin> </plugins> </build>
完成以上配置后,MapStruct生成的实现类就会直接调用带参构造器创建对象,无需依赖无参构造器和setter方法。
内容的提问来源于stack exchange,提问作者diegombf
相关产品推荐
相关产品推荐

