我一直在使用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
实现映射有关,但如果我可以在属性映射中使用继承,那将会很好。你知道怎么做吗?
答案 0 :(得分:0)
我刚刚找到void MyReplaceFunction(char& c)
{
static const int delta='A'-'1';
if(c>='A' && c<='Z')
{
c-=delta;
}
}
std::for_each(str.begin(), str.end(), MyReplaceFunction);
的创建者, Jonathan Halterman 的答案:
https://groups.google.com/forum/#!topic/modelmapper/cvLTfqnHhqQ
目前无法进行这种映射继承。
所以我想我必须在子类
中实现所有转换