[Solutions] <MapStruct> 与@Builder冲突, @AfterMapping不生效

基于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

​​​​​​​

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在使用MapStruct时,可能会遇到一些冲突。其中一个常见的冲突是与Lombok的@Builder注解相关的问题。当使用@Builder注解时,MapStruct在编译时会使用BeanBuilder.build()方法来完成目标对象的实例化。这可能导致与MapStruct生成的代码冲突。 为了解决这个冲突,可以将@MappingTarget修饰的目标对象改为使用由@Builder注解引入的Bean.Builder的构造器。这样可以避免与Lombok的@Builder注解产生冲突,并正确地使用MapStruct。 总结起来,当在使用MapStruct时遇到冲突时,可以采取以下步骤来解决问题: 1. 确定冲突的具体原因是什么,例如是否与Lombok的@Builder注解有关。 2. 根据冲突的特点和需求,选择适当的解决方案。 3. 根据解决方案,对相关的注解或代码进行修改,以解决冲突。 4. 确保修改后的代码能够正确地使用MapStruct,并且不再产生冲突。 需要注意的是,在解决冲突时,要仔细阅读相关的文档和参考资料,以确保理解和正确实施解决方案,以避免出现其他问题。 希望这些信息能够帮助您解决MapStruct冲突问题。如果还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [[Solutions] MapStruct 与@Builder冲突, @AfterMapping不生效](https://blog.csdn.net/nxhljt/article/details/123893492)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值