java如何用抽象字段将平面对象映射到深度DTO?
我有以下模型课:
@Data
public class M {
private String name;
private int age;
private int height;
}
以及以下Dto类:
@Data
public class Dto {
private String name;
private B nested;
}
@Data
public class C extends B {
private int height;
}
其中B是一个抽象类:
@Data
public abstract class B {
private int age;
}
我想使用ModelMapper将模型实例转换为Dto实例,并将模型的年龄和高度属性转换为正确填充的C对象
举个例子:
model = { name: "Steve", age: 35, height: 185 } of Model
致:
dto = { name: "Steve", nested: { age: 35, height: 185 } of C } of Dto
我尝试了以下方法:
mapper.createTypeMap(Model.class, Dto.class).addMappings(new PropertyMap<Model, Dto>() {
@Override
protected void configure() {
map(source, destination.getNested());
}
});
mapper.createTypeMap(Model.class, C.class);
以dto.getNested() == null
结束
还试图添加
public Model getSelf() { return this; }
添加到模型类(出于基本好奇),并重新定义属性映射器,使其具有:
with(new Provider<C>(req => new C())).map(source.getSelf(), destination.getNested());
它填充了dto.getNested()
,但没有填充dto.getNested().getHeight()
这可以通过ModelMapper实现吗
谢谢你的建议
# 1 楼答案
事实证明,除了拥有一个提供程序并手动列出所有平面到嵌套属性之外,没有其他方法可以配置映射器。因为我想避免这种情况,我被下面的转换器卡住了:
,并在M to Dto配置中使用此转换器将
source
映射到destination.getNested()
。这还假设转换器需要访问映射器。嗯