如何映射对象包含带有Mapstruct的List

时间:2018-02-02 11:29:26

标签: java mapstruct

给定如下定义的Source类:

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

和Phone类定义如下:

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

和Target类定义如下:

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);
}

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

1 个答案:

答案 0 :(得分:1)

为了实现这一目标,您需要通过告知如何从Phone映射到Long来帮助MapStruct。反之亦然。

您的映射器需要看起来像:

@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将自动知道该怎么做并调用该方法。