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,提问作者侯章旭
相关产品推荐
相关产品推荐

