我一直在使用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
来实现映射有关,但如果我可以在我的属性映射中使用继承会很好。你知道怎么做吗?