使用MapStruct 1.2.0映射嵌套的集合属性

时间:2019-10-15 14:54:21

标签: java mapping mapstruct

我正在尝试根据以下类使用 MapStruct 1.2.0 映射以下属性

ClassA {
String id
List <Object1> artefacts
}

DTOClassA{
String id
List <Object2> artefacts
}

Object1 {
String id
String serialNo
}

Object2 {
String id
String serialNo
}

在我的接口映射器中,如何将来自ClassA伪像列表的serialNo映射到SerialNo DTOClassA伪像列表?我尝试了以下方法,但没有工作:

@Mapping(target="artefacts.serialNo", source="artefacts.serialNo")
ClassA mapToDto(DTOClassA dto)

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

使用MapStruct v1.3.0并仅设置以下Mapper

@Mapper
public interface TestSOMapper {
    ClassA mapToDto(DTOClassA dto);
}

导致自动生成以下MapperImpl

...
protected Object1 object2ToObject1(Object2 object2) {
    if ( object2 == null ) {
        return null;
    }

    Object1 object1 = new Object1();

    object1.setId( object2.getId() );
    object1.setSerialNo( object2.getSerialNo() );

    return object1;
}
...

这就是您想要的,不是吗?如果属性名称不匹配,建议您为Object1> Object2映射编写第二个Mapper。

我希望这会有所帮助!