java - Mapstruct 隐式调用具有多个参数的其他映射器
问题描述
给定以下类和一个采用多个源参数的映射器
(我使用 lombok 来尽可能缩短源代码。)
@Getter
@Setter
public class MySourceOne {
private String src1;
}
@Getter
@Setter
public class MySourceTwo {
private String src2;
}
@Getter
@Setter
public class MyTargetObject {
private String prop1;
private String prop2;
}
@Mapper
public interface MyTargetObjectMapper {
@Mapping(target="prop1", source="a")
@Mapping(target="prop2", source="b")
public MyTargetObject mapMyObject(String a, String b);
}
@Getter
@Setter
public class MyComplexTargetObject {
private MyTargetObject myTargetObject;
}
我正在尝试创建一个映射器MyComplexTargetObject
,它将隐式调用MyTargetObjectMapper
.
但是“源”不允许像这样映射多个参数
@Mapper(uses= {MyTargetObjectMapper.class})
public interface MyComplexTargetObjectMapper {
@Mapping(target="myTargetObject", source="one.src1, two.src2")
public MyComplexTargetObject convert(MySourceOne one, MySourceTwo two);
}
所以我试图使用一个expression="..."
而不是源,但到目前为止没有任何效果。
在不调用具体方法的情况下,有什么想法是一种干净的方法吗?MyTargetObjectMapper
解决方案
MapStruct 不支持选择具有多个源的方法。
但是:您可以通过目标嵌套来做到这一点。
@Mapper
public interface MyComplexTargetObjectMapper {
@Mapping(target="myTargetObject.prop1", source="one.src1" )
@Mapping(target="myTargetObject.prop2", source="two.src2")
public MyComplexTargetObject convert(MySourceOne one, MySourceTwo two);
}
并让 MapStruct 负责生成映射器。注意:您仍然可以使用 a MyComplexTargetObjectMapper
to do single source to target 来实现这一点。
推荐阅读
- javascript - 如何修复此内存泄漏监视器功能以避免最大调用堆栈循环?
- c++ - 中断到达时如何退出 sleep()?
- php - Assign an array to the 'name' attribute in an HTML form
- ckeditor - ckeditor 通过 id 获取元素
- c# - System.IO.FileNotFoundException 上 System.Runtime.CompilerServices.AsyncTaskMethodBuilder
- maximo - 如何在 MAXIMO 中管理货架到期的商品
- android - Android ListView - 为不可见的项目调用 getView
- javascript - 使用来自 JavaScript 的每个请求向服务器端发送信息
- python - 如何修改列表以使其与 Python 中的不同列表相同
- r - Ggplot 错误“无法将 ggproto 对象添加在一起”和上标