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

Mapstruct如何自动调用自定义方法实现多属性映射到单对象属性

解决方案

你只需要给转换方法添加单个@Mapping注解,通过expression指定调用自定义的toAttendanceTime方法即可,不需要配置两条属性映射规则。

完整代码实现

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

// 如果AttendanceTime、AttendanceClickDTO和转换器不在同一个包下,可在@Mapper中添加imports属性引入对应类避免编译报错
@Mapper(
        componentModel = "spring",
        uses = {CommonConverter.class}
)
public interface AppAttendanceConverter {

    // 仅需这一条Mapping注解即可完成复合属性映射
    @Mapping(
            target = "attendanceTime",
            expression = "java( toAttendanceTime(attendanceClickDTO.getAttendanceDate(), attendanceClickDTO.getClickTime()) )"
    )
    AttendanceClick toAttendanceClick(AttendanceClickDTO attendanceClickDTO, StaffInfo staffInfo, DepartmentInfo departmentInfo);

    default AttendanceTime toAttendanceTime(LocalDate attendanceDate, LocalDateTime clickTime) {
        return new AttendanceTime( attendanceDate, clickTime );
    }
}

实现原理

Mapstruct在生成转换器实现类时,会直接将expression中定义的代码写入对应属性的赋值逻辑,直接调用你自定义的默认方法完成AttendanceTime对象的构造,完全规避了逐属性映射的冗余配置。


内容的提问来源于stack exchange,提问作者侯章旭

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:54:05