[Solutions] <MapStruct> 与@Builder冲突, @AfterMapping不生效
Bug, 解决, MapStruct, 版本冲突
·
基于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
更多推荐
所有评论(0)