给出以下类和一个使用多个源参数的映射器
(我使用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
吗?
答案 0 :(得分:1)
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负责生成映射器。注意:您仍然可以使用MyComplexTargetObjectMapper
进行单一来源定位以实现此目标。