【问题标题】:ModelMapper cannot convert from plain DTO to entity with complex fieldModelMapper 无法从普通 DTO 转换为具有复杂字段的实体
【发布时间】:2018-10-14 08:14:37
【问题描述】:

有没有办法从普通的 DTO 转换为:

class DTO {
   private Set<String> prop;
}

到像这样的实体:

class Entity {
   private Nested nested;
}

class Nested {
   private Set<String> prop;
}

当我尝试默认配置时,嵌套字段仍然为空。
应该配置什么?

【问题讨论】:

    标签: modelmapper


    【解决方案1】:

    您可以使用deep mapping的功能

    ModelMapper mapper = new ModelMapper();
    mapper.createTypeMap(DTO.class, Entity.class)
                .addMappings(mapping -> mapping.<Set<String>>map(DTO::getProp, (dest, v) -> dest.getNested().setProp(v)));
    
    mapper.createTypeMap(Entity.class, DTO.class)
                .addMappings(mapping -> mapping.map(src -> src.getNested().getProp(), DTO::setProp));
    

    【讨论】:

    • 确实如此。但是假设我有一个有 100 个字段的类。我需要为它们中的每一个添加映射,并且会完全失去 ModelMapper 库的好处,因为这就像我编写自己的映射器函数一样。所以,我需要根据类型指定这个以某种方式通用。
    • 你能提供更复杂的例子吗?基于类型?您的每个字段都有自己的类型?如果你有两个 Set&lt;String&gt; 文件怎么办?
    • 如果我有两个 Set 字段,我需要根据您的代码创建两个映射。因此,映射的数量会随着字段数量的增加而增加,每次添加或删除字段时都需要更改配置。
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多