小编典典

ModelMapper:在运行时映射抽象类

java

我正在使用ModelMapper
Framework(http://modelmapper.org/)映射Java中的对象。在映射包含抽象类的具体类(DTO到实体)时遇到了一个问题。

示例:任务具有AbstractItems列表。
AbstractItems是问题和条件。

public class TaskDTO {
   ...
   private List<AbstractItemDTO> items;
}

映射方法:

// task is an TaskDTO object
return getModelMapper().map(task, TaskEntity.class);

ModelMapper尝试创建一个AbstractItem的新实例,该实例将引发异常。有没有办法在运行时映射抽象类?
像QuestionDTO-> Question,CriteriaDTO-> Criteria


阅读 210

收藏
2020-11-01

共1个答案

小编典典

我用ModelMapper无法解决此问题。因此,我切换到推土机。
推土机 是Java中对象映射的绝佳工具。而且真的很容易使用。您可以在XML文件中定义相应的映射类。

这是文档的链接。http://dozer.sourceforge.net/documentation/mappings.html

我的Spring dozer-bean.xml 解决方案
__

<bean class="org.dozer.spring.DozerBeanMapperFactoryBean" lazy-init="false">
        <property name="mappingFiles">
            <list>
                <value>META-INF/mapping/dozer-config.xml</value>
            </list>
        </property>
</bean>

dozer-config.xml

<mapping>
            <class-a>com.packagename.dto.QuestionDTO</class-a>
            <class-b>com.packagename.entities.core.Question</class-b>
</mapping>
<mapping>
        <class-a>com.packagename.dto.CriteriaDTO</class-a>
        <class-b>com.packagename.entities.core.Criteria</class-b>
</mapping>
2020-11-01