如何使用 mapstruct 将字段从集合外部映射到集合内部

How to use mapstruct to map field from outside a collection to inside a collection

我的环境 java: 17.0.3 映射结构:1.4.2.Final

这是我的例子

@Data
public class Example {

    private Long outsideId;

    private List<Inside> insides;
}

@Data
public class Inside {

    private Long insideId;

    private String name;
}
@Data
public class ExampleReq {

    private Long outSideId;

    private List<InsideReq> insides;
}

@Data
public class InsideReq {

    private String name;
}

我想让集合中所有元素的insideId的值为outsideId,

我目前的配置如下

public interface ExampleAssembler {

    @Mapping(target = "insides.insideId",source = "outsideId")
    Example of(ExampleReq req);
}

但是报错

java: The return type List<Inside> is an abstract class or interface. Provide a non abstract / non interface result type or a factory method.

如何配置?

问题是 属性 insides 是一个列表,因此使用嵌套属性,下一个属性是 List 的属性,而不是包含在 Inside 中的属性列表.

我认为最好的方法是使用 @AfterMapping 手动设置值。

例如:

@AfterMapping
void configureIds( @MappingTarget Example target ) {
    target.getInsides().forEach( inside -> inside.setInsideId( target.getOutsideId() ) );
}