我一直在使用ModelMapper
将Identity
对象(实体)与DTO
对象转换。我想在所有实体(GenericEToDtoPropertyMap
)的通用类中实现通用属性转换,并在每个实体(实体PersonEToDTOPropertyMap
的Person
)单独的子类中实现显式属性转换。更清楚地说,这是我的代码:
通用属性图:
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/