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

配置ModelMapper将嵌套对象映射到字段

公孙鸿才
2023-03-14

这是我的DTO:

public class TagVolumeDTO {
    private Long id;
    private Long idTag;
    //...
}

public class TagTDO {
    private Long id;
    private Long amount;
    //...
}

这是我的实体:

public class TagVolume {
    private Long id;
    private Tag tag;
    //...
}

public class Tag {
    private Long id;
    private Long amount;
    //...
}

我想配置我的ModelMapper将Tag#id映射到TagVolumeDTO#idTag。这可能吗?

共有2个答案

罗奇文
2023-03-14

对于这种映射,最好使用像mapStuct这样的注释处理器,它可以减少代码。

它将为Mapper生成代码

  @Mapper
public interface SimpleSourceDestinationMapper {
    TagVolumeDTO sourceToDestination(Tag source);
    Tag destinationToSource(TagVolumeDTO destination);
}

这些映射器的用法如下

private SimpleSourceDestinationMapper mapper
      = Mappers.getMapper(SimpleSourceDestinationMapper.class);

TagVolumeDTO destination = mapper.sourceToDestination(tag);

请查找详细实施地图的链接

傅增
2023-03-14

配置:

ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
mapper.typeMap(TagVolume.class, TagVolumeDTO.class)
        .addMappings(m -> m.map(src -> src.getTag().getId(), TagVolumeDTO::setIdTag));

用法:

Tag tag = new Tag();
tag.setId(1L);
tag.setAmount(10L);
TagVolume tagVolume = new TagVolume();
tagVolume.setId(123L);
tagVolume.setTag(tag);
System.out.println(mapper.map(tagVolume.getTag(), TagDTO.class));
System.out.println(mapper.map(tagVolume, TagVolumeDTO.class));

输出:

ID=1,金额=10

TagVolumeDTO(id=123,idTag=1)

ModelMapper版本:1.1.0

另外,你可以组织你的代码类似于我在另一个问题中的答案。

 类似资料:
  • 我有一个带有对象的RealmObject类,它实际上是PrimaryKey作为这个对象中的字符串。但不允许将对象作为主键。 因为目前不可能更改服务器的响应结构,所以我尝试了不同的方法来解决这个问题。但到目前为止,没有一个奏效。我在Android Studio中使用“io.realm:realm-gradle-plugin:0.87.2”作为和“realm-android”插件。 谢谢beeende

  • 我创建映射如下所示。如何将平面dto对象属性(街道、城市等)映射到域对象中的嵌套地址。当我试着去做的时候,我发现了一个错误: [错误]诊断:返回类型中的属性“Address.PostalCode”未知。@Mapping(来源=“City”,目标=“Address.City”), 还有类...

  • 假设我有包含以下字段的传入对象: 还有更多的字段可以转换为我的DTO: ,但我想以自定义的方式映射这两个: 这意味着我只需要编写一个方法来将的几个字段转换为嵌套的DTO对象。我该怎么做呢? Upd:我不介意只将转换后的参数传递给方法: 那就更好了。

  • 有没有什么方法可以将嵌套的JSON值映射到字段而不需要额外的类?我有一个JSON响应 但是在中,我只需要值。因此,我决定创建Kotlin数据类,并尝试使用注释的选项 下面的代码正在工作 我有几个嵌套值,为它们创建额外的类是相当夸张的。还有比为节点创建嵌套类更好的方法吗?

  • 我想映射这个JSON数据: 对于此java对象: 但是它失败了,所有的值都是。我尝试在变量上方添加,但没有成功。 是否可以反序列化JSON,使其仅映射到(这个)一个类? 编辑:我使用Spring StreamListener进行如下映射:

  • 我与ModelMapper框架有麻烦。请解释为什么我看到以下行为。 我在build.gradle有以下依赖性 和一个类客户: 我还有一个地图绘制工具: 还有一个测试 在fred()中,方法输出是非红色的“Customer{name=fred,age=40}”(“Customer{name=null,age=40}”)。你能解释一下为什么吗?为什么我在第一个方法中看不到输出“George”?