【问题标题】:How to Map an object contains a List with Mapstruct如何映射一个对象包含一个带有 Mapstruct 的列表
【发布时间】:2018-02-13 22:12:50
【问题描述】:

给定如下定义的 Source 类:

class Source{
    private String name;
    private int age;
    private List<Phone> phones;
    // getters and setters
}

以及如下定义的电话类:

class Phone{
        private Long id;
        private String phoneNumber;
        // getters and setters
    }

以及如下定义的目标类:

class Target{
    private String name;
    private int age;
    private List<Long> idsPhones;
    // getters and setters
}

我有一个界面是:

@Mapper
interface MyMapper{
    Target toTarget(Source source);
    Source toSource(Target target);
}

如何将源类中的电话列表映射到目标类中的 idsPhone 列表,反之亦然?

【问题讨论】:

  • Phone 类的结构是什么? idsPhone 代表什么?它们有什么关系?你试过什么了?这个问题需要更多细节。
  • 嗨@archilius,电话类有这样的结构:class Phone{ private Long id, private String phoneNumber}
  • 将此添加为问题中的编辑并回答我提出的其他问题。没有足够的细节,没有人可以帮助你
  • 你考虑过使用orika吗?

标签: java mapstruct


【解决方案1】:

为了实现这一点,您需要告诉 MapStruct 如何从Phone 映射到Long。反之亦然。

您的映射器需要如下所示:

@Mapper(uses = PhoneRepository.class)
interface MyMapper {

    @Mapping(target = "idsPhones", source = "phones")
    Target toTarget(Source source);

    @InheritInverseMapping
    Source toSource(Target target);

    default Long fromPhone(Phone phone) {
        return phone.getId();
    }
}

如果您的 PhoneRepository 包含一个接受 Long 并返回 Phone 的方法,则 MapStruct 将自动知道要做什么并调用该方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 2021-11-29
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多