我有以下类结构(它实际上是一个带有Hibernate映射的VO层):
public abstract class abstractClassVO {
private int id;
private String name;
}
public class concreteClassAVO extends abstractClassVO {
private String aAttribute;
}
public class concreteClassBVO extends abstractClassVO {
private Long bAttribute;
}
等效的DTO对象:
public abstract class abstractClassDTO {
private int id;
private String name;
}
public class concreteClassADTO extends abstractClassDTO {
private String aAttribute;
}
public class concreteClassBDTO extends abstractClassDTO {
private Long bAttribute;
}
然后我有另一个这样的对象:
public class compositeObject {
private int anAttribute;
private abstractClassVO myInstance;
}
及其等价物:
public class compositeObjectDTO{
private int anAttribute;
private abstractClassDTO myInstance;
}
如何告诉dozer自动将myInstance
映射到与VO层中具体类实现相对应的特定DTO?
目前,开箱即用,Dozer甚至没有在myInstance
类的compositeObjectDTO
字段中放置任何内容。我的猜测是,这是因为abstractClassDTO
它是一个抽象类,并且因为它无法确定实现,所以它什么都不做。我没有任何例外。
答案 0 :(得分:0)
Dozer无法开箱即用,但您可以编写一个帮助程序来确定源类的目标类。您可以从DozerBeanMapper.getMappingMetadata()。getClassMappings *方法获取此信息。这些方法返回包含目标类的ClassMappingMetadata列表。您只需要知道目标类是否继承自abstractClassDTO。如果您只有一个VO的映射,则可以省略此检查。
对于双向映射,您还应检查ClassMappingMetadata.MappingDirection字段。