如何使用 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() ) );
}
我的环境 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() ) );
}