首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将其他参数传递给MapStruct映射器

将其他参数传递给MapStruct映射器
EN

Stack Overflow用户
提问于 2018-05-25 04:33:17
回答 1查看 8.2K关注 0票数 4

还没有想好如何传入额外的参数或替代方法。

目前我正在映射一个Order和OrderLines。这两个对象是不同的,需要@mappings。例如,我有一个Order和OrderRequest对象都是不同的,需要@Mappings注释来映射值,这与OrderLines相同。

我已经创建了以下映射器

使用= OrderLineMappers.class)

  • OrderLineMappers (使用= OrderLineMapper.class)

  • OrderLineMapper

)

  • OrderMapper

所以我的问题是OrderLine需要来自Order对象的OrderId。然而,在OrderLineMapper中,它传入的是OrderLine,而不是Order。如何向OrderLineMapper发送OrderId?目前,我让OrderMapper执行@AfterMapper,遍历orderLines并使用OrderId进行填充。

任何帮助都是最好的。

OrderMapper类

代码语言:javascript
复制
@Mapper(componentModel = "spring",  uses = {OrderLineMappers.class})
public abstract class OrderMapper {

@AfterMapping
protected void orderRequestFromOrder( Order order, @MappingTarget 
OrderRequest orderRequest ) {

    //Wanting to do this at the OrderLineMapper class and not here
    String orderId = order.getId();
    List<OrderLineRequest> lines = orderRequest.getOrderLines();
    List<OrderLineRequest> updatedLines = new ArrayList<>();
    for (OrderLineRequest line : lines) {
        line.setOrderId(orderId);
        updatedLines.add(line);
    }
    orderRequest.setOrderLines(updatedLines);
}

@Mappings({
    @Mapping( source = "orderId", target = "id" ),
    @Mapping( source = "orderNumber", target = "order_number" ),
    @Mapping( source = "orderLines", target = "orderLines")
})
public abstract Order orderRequestToOrder(OrderRequest orderRequest);

OrderLineMappers类

代码语言:javascript
复制
@Mapper(componentModel = "spring",  uses = {OrderLineMapper.class})
public interface OrderLineMappers {

    List<OrderLine> orderLines(List<OrderLineRequest> orderLineRequest);

    @InheritInverseConfiguration
    List<OrderLineRequest> orderLineRequests(List<OrderLine> orderLine); 

}

OrderLineMapper类

代码语言:javascript
复制
@Mapper(componentModel = "spring")
public abstract class OrderLineMapper {
    @Mappings({
        @Mapping( target = "orderId", source = "orderLineId" ),
        @Mapping( target = "order_line_number", source = "orderLineNumber")

    })
    public abstract OrderLine orderLineRequestToOrderLine(OrderLineRequest orderLineRequest);
}

再次尝试将OrderId传递给OrderLineMapper。我不知道该怎么做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 04:10:23

你不能真的这么做。您可以做的是使用@Context并在其中执行您的逻辑。在您的上下文中可以有@AfterMapping@BeforeMapping,您可以在其中存储Order id并在其执行期间使用它

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50517750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档