Mapstruct 使用另一个具有多个参数的映射器和 lombok @Builder

问题描述 投票:0回答:1

我想使用 Mapstruct 从两个源对象构建一个内部有嵌套对象的目标对象,并同时使用 Lombok。映射的描述是:

目标:

class Kpi {
 String name;
 KpiMeta meta;
}

为了构建此类,我使用两个源对象:

JmsMessageKpiDto
KpiDto

我定义了第一个映射器,它采用相同的两个源对象并创建一个

KpiMeta
目标,然后我创建了第二个映射器,它声明使用第一个映射器来构建最终的
Kpi
对象:

@Mapper(uses = KpiMetaMapper.class)
interface KpiMapper {
 KpiMapper INSTANCE = Mappers.getMapper(KpiMapper.class);

 Kpi toKpi(JmsMessageKpiDto jms, KpiDto dto);
}

对于我的两个目标对象(Kpi 和 KpiMeta),我想使用 Lombok 中的

@Builder
。但最终,在生成的代码中,字段
KpiMeta
并未填充到
Kpi
对象内。

有什么解决方案可以让它工作吗?

java lombok mapstruct
1个回答
0
投票

您只需要一个映射器即可从多个来源获取目标对象。

例如,让有一个物体

public class Person {

    private Long id;
    public String name;
}

和物体

public class Message {

    private String number;
    private String series;
} 

然后创建一个对象

public class Citizen {

    private Passport passport;
    private String name;
}

带有嵌套对象

public class Passport {

    private String number;
    private String series;
}

你只需要编写这样一个映射器

@Mapper
public interface CitizenMapper {

    @Mapping(source = "person.name", target = "name")
    @Mapping(source = "message.number", target = "passport.number")
    @Mapping(source = "message.series", target = "passport.series")
    Citizen createCitizen(Person person, Message message);
}

将自动创建嵌套的 Passport 对象。

有关更多信息,请参阅 MapStruct 参考指南

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.