You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:35:19