当前位置: 首页 > 知识库问答 >
问题:

模型映射器的抽象

赵雅懿
2023-03-14

我有一个用户的Entity-DTO转换器,如下所示:

public class UserConverter {
    
    public UserDto convertEntityToDto(UserEntity user) {
        ModelMapper modelMapper = new ModelMapper();
        return modelMapper.map(user, UserDto.class);
    }

    public UserEntity convertDtoToEntity(UserDto userDto) {
        ModelMapper modelMapper = new ModelMapper();
        return modelMapper.map(userDto, UserEntity.class);
    }

}

我有很多Entity-DTO要管理,所以我想像这样抽象转换器

public class Converter<T, S> {
    
    public S convertEntityToDto(T t) {
        ModelMapper modelMapper = new ModelMapper();
        return modelMapper.map(t, ???);
    }

    public T convertDtoToEntity(S s) {
        ModelMapper modelMapper = new ModelMapper();
        return modelMapper.map(s, ???);
    }

}

我的问题是:我必须放置什么而不是???

共有2个答案

穆高澹
2023-03-14

你希望你可以使用S,对吗?不幸(或幸运?)Java编译器在生成类文件之前擦除所有泛型类型,因此运行时的代码没有可用的正确类型信息。这意味着您需要提供它。

public class Converter<T, S> {

    private Class<S> dtoType;

    public Converter(Class<S> dtoType) {
        this.dtoType = dtoType;
    }
    
    public S convertEntityToDto(T t) {
        ModelMapper modelMapper = new ModelMapper();
        return modelMapper.map(t, dtoType);
    }

    public T convertDtoToEntity(S s) {
        ModelMapper modelMapper = new ModelMapper();
        return modelMapper.map(s, dtoType);
    }

}
狄旻
2023-03-14

我认为您可以使用modelMapper中的TypeToken,但不确定它是否有效

 类似资料:
  • 当我尝试通过枚举将源中的字符串映射到目标中的整数时。ModelMapper失败。 来源 目的地 字符串和整数之间的映射在枚举中定义

  • 我有两个需要映射的继承层次结构。一个层次结构是国内的,另一个是野生的。我有抽象的Domestic动物和具体的DomesticCat和DomesticDog扩展它。在第二个层次结构中,我有抽象的Wild动物和具体的WildCat和WildDog扩展它。我还有另外两个类,分别是WildAnimalFeeder具有Wild动物的成员对象和DomesticAnimalFeeder具有DomesticAni

  • 在对这个话题进行了大量的测试和研究之后,我无法完全解决我的问题。我正在springboot应用程序中使用modelmapper进行实体/DTO映射。我正在尝试配置modelmapper,将一个集合映射到一个简单的DTO对象。我已经创建了一个自定义转换器,它正在按预期工作: 我现在的问题是将此转换器应用于所有“集合”= 如果我直接在模型映射器中添加转换器,它就是不工作。 你对此有什么提示或解决办法吗

  • 我正在开发和spring应用程序,对于对象映射,我使用ModelMapper库。 我能够映射基本类映射,但当我尝试映射2个集合元素时,源是一组枚举,具有其他属性,如名称和描述,目标是具有id、名称和描述的pojo。 我已经尝试了类型地图和转换器在映射配置文件,但我得到例外的映射器。 源类来自其他应用程序(其依赖项已在pom.xml中添加)。我也不希望源类型作为目标setter中的参数。 前。 资料

  • 我正在为我们班做一个项目。需要将DTO映射到实体,反之亦然。我的DTO没有Id字段,转换正在控制器层进行。另外两个类正在扩展我的实体,因此@Superbuilder。 我的转换实体- 但是DTO- 如果你们谁能帮我找到解决办法,我将不胜感激。提前感谢您的时间和回复。 =======我的DTO===== =====我的实体===== } ====ModelMapper的Bean===== =====

  • 我试图使用http://modelmapper.org/表示DAO和模型类的库- 模型类- 道类- 公共类主题{私有字符串名称; 映射逻辑 ModelMapper似乎不起作用,它给我提供了主题类项目,而不是主题模型类项目