gpt4 book ai didi

java - 如何通过 ModelMapper 的 PropertyMap 使用继承

转载 作者:行者123 更新时间:2023-11-30 06:56:50 31 4
gpt4 key购买 nike

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

通用属性映射:

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() 方法中。

我想,这与使用 Reflection 实现映射的 ModelMapper 有关,但如果我可以在属性映射中使用继承,那就太好了。您知道如何做到这一点吗?

最佳答案

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

This sort of mapping inheritance is not currently possible.

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

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com