我一直在使用ModelMapperIdentity对象(实体)与DTO对象转换。我想在所有实体(GenericEToDtoPropertyMap)的通用类中实现通用属性转换,并在每个实体(实体PersonEToDTOPropertyMapPerson)单独的子类中实现显式属性转换。更清楚地说,这是我的代码:

通用属性图:

public class GenericEToDtoPropertyMap<E extends Identity, DTO extends PersistentObjectDTO> extends PropertyMap<E, DTO> {

  @Override
  protected void configure() {
    // E.oid to DTO.id conversion
    map().setId(source.getOid());
  }

}


实体Person的特定属性图:

public class PersonEToDTOPropertyMap extends GenericEToDtoPropertyMap<Person, PersonDTO> {

  @Override
  protected void configure() {
    super.configure();
    // implement explicit conversions here
  }

}


属性图的用法:

modelMapper = new ModelMapper();
Configuration configuration = modelMapper.getConfiguration();
configuration.setMatchingStrategy(MatchingStrategies.STRICT);
modelMapper.addMappings(new PersonEToDTOPropertyMap());
// convert person object
PersonDTO personDto = modelMapper.map(person);


问题是通用转换不适用。就我而言,person.oid不会复制到personDto.id。仅当我删除零件时,它才能正常工作:

map().setId(source.getOid());


GenericEToDtoPropertyMap.configure()方法中放入并放入PersonEToDTOPropertyMap.configure()方法中。

我猜想,这与使用ModelMapper来实现映射的Reflection有关,但是如果我可以在属性映射中使用继承,那就太好了。你有什么想法吗?

最佳答案

我刚刚从ModelMapper的创建者Jonathan Halterman找到了一个答案:
https://groups.google.com/forum/#!topic/modelmapper/cvLTfqnHhqQ


  目前尚无法进行这种映射继承。


所以我想我必须在子类中实现所有转换

关于java - 如何在ModelMapper PropertyMap中使用继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41633721/

10-10 05:56