MapStruct如何指定隐式映射使用的参数对象?
解决MapStruct多参数映射时指定隐式映射源的问题
针对你在MapStruct 1.5.2版本中遇到的多参数同名属性冲突、想指定某个参数作为隐式映射源的需求,可以通过@BeanMapping的defaultSource属性实现,无需手动编写大量映射或忽略默认映射。
具体实现示例
修改映射方法,添加@BeanMapping(defaultSource = "b")配置:所有未通过@Mapping显式指定来源的属性,会自动从参数b中隐式映射;显式标注的ca1、ca2则从a中取值,完美规避同名属性冲突:
@Mapping(target = "ca1", source = "a.ca1") @Mapping(target = "ca2", source = "a.ca2") @BeanMapping(defaultSource = "b") C mapFrom(A a, B b);
原理说明
defaultSource属性用于指定隐式映射的默认源参数名称,MapStruct会优先使用显式@Mapping中指定的源;对于未显式配置的目标属性,自动从defaultSource指定的参数中匹配同名属性完成映射,既解决了冲突问题,又省去了手动编写大量隐式映射的繁琐操作。
若后续有特殊属性需要调整,仅需在@Mapping中单独指定即可,其余属性自动复用defaultSource的配置。
内容的提问来源于stack exchange,提问作者Wafa
相关产品推荐
相关产品推荐

