基于MapStruct版本1.3.0 Final, 其他版本不明确

现象:

        MapStruct的Converter中, 抽象转换转换方法后的, 带@AfterMapping注解的补充default具体方法不能生效

 正确实现:

原因:

        由于Lombok的@Builder注解影响, 在MapStruct编译时, 会用BeanBuilder.build()完成目标对象的实例化

解决:

        1. 如正确实现的截图里:

                将@MappingTarget修饰的目标对象改为由@Builder使用引入的Bean.Builder的构造器

        2. 如下图资料中, 对Mapping方法添加对应@BeanMapping注解及builder属性(未亲测)

Code: 

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface CompanyConverter {

    CompanyConverter INSTANCE = Mappers.getMapper(CompanyConverter.class);

   //...

    @Mapping(target = "companyStatus", source = "companyStatus", qualifiedByName = "getCompanyStatus")
    CancellationRes toCancellation(LegalCompany legalCompany);

    /**
     * 补充字段信息
     */
    @AfterMapping
    default void fillCancellation(@MappingTarget CancellationRes.CancellationResBuilder res, LegalCompany entity) {
        //如果是注销状态, 则补充其他注销信息
        if (CompanyStatus.CANCEL.getCode().equals(entity.getCompanyStatus())) {
            res.cancelledBy(entity.getUpdateName());
            res.cancelledTime(entity.getUpdateTime());
        }
    }
}

参考链接:  

https://github.com/mapstruct/mapstruct/issues/1556https://github.com/mapstruct/mapstruct/issues/1556

​​​​​​​

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐