2015-01-23 5 views
2

Я использую ModelMapper Framework (http://modelmapper.org/) для отображения объектов в Java. Я столкнулся с проблемой при отображении конкретных классов (DTO в Entites), содержащих абстрактные классы.ModelMapper: отображение абстрактных классов во время выполнения

Пример: Задача имеет список AbstractItems.
AbstractItems - это вопрос и критерии.

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

метод Mapping:

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

ModelMapper пытается создать новый экземпляр AbstractItem, который бросает исключение. Есть ли способ сопоставить абстрактные классы во время выполнения?
Как QuestionDTO -> Вопрос, КритерииDTO -> Критерии

ответ

0

Я не мог решить эту проблему с ModelMapper. Таким образом, я переключился на Дозер.
Dozer - отличный инструмент для сопоставления объектов в Java. И это действительно легко использовать. Вы можете определить соответствующие классы сопоставления в XML-файле.

Вот ссылка на документацию. http://dozer.sourceforge.net/documentation/mappings.html

Мое решение с весны
бульдозер-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> 

бульдозер-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> 
Смежные вопросы