簡體   English   中英

MapStruct - Map 單個 object 中的對象列表

[英]MapStruct - Map list of objects in single object

我從第 3 方獲取對象列表,但它始終只包含一個 object。 所以在我的目標結束時,我將它創建為 object 而不是列表。 object 包含多個列表,就像源 object 一樣。

這就是我嘗試將 map 列表添加到 object 的方式。 ChargeTransaction 包含 orderInvoice 作為 object 而不是列表。 對於 ChargeTransaction 內部的列表,我創建了單獨的映射器。 我不想在@afterMapping 中編寫 java 代碼,因為這樣嵌套列表將被映射。 嵌套列表在兩個對象中都是類型。

@Mapping(target = "orderInvoice", source = "basePaymentRequest.invoice.eventPayload.orderInvoices")
ChargeTransaction createInvoiceCTMapper(PaymentTriggerBaseModel basePaymentRequest, ChargeType chargeType);

錯誤

java: Can't map property "List<OrderInvoice> basePaymentRequest.invoice.eventPayload.orderInvoices" to "OrderInvoice orderInvoice". Consider to declare/implement a mapping method: "OrderInvoice map(List<OrderInvoice> value)".

我試過了

@Mapping(target = "orderInvoice", expression= "java(basePaymentRequest.invoice.eventPayload.orderInvoices.get(0))")

但它在 Impl class 中給出錯誤

 chargeTransaction.setOrderInvoice( basePaymentRequest.invoice.eventPayload.orderInvoices.get(0) );

 java: incompatible types: com.sams.oms.ng.common.models.payment.request.OrderInvoice cannot be converted to com.sams.oms.ng.common.models.payment.cosmos.OrderInvoice

恕我直言,解決此問題的最佳方法是使用@Named@Mapping#qualifiedByName配對

@Mapper
class Mapper {

  @Mapping(target = "orderInvoice", source ="basePaymentRequest.invoice.eventPayload.orderInvoices", qualifiedByName="firstElement")
  ChargeTransaction createInvoiceCTMapper(PaymentTriggerBaseModel basePaymentRequest, ChargeType chargeType);

  @Named("firstElement")
  OrderInvoice map(List<OrderInvoice> value) {
    if(value == null) return null;
    if(value.isEmpty()) return null;
    return map(value.get(0));
  }

  abstract com.sams.oms.ng.common.models.payment.request.OrderInvoice map(com.sams.oms.ng.common.models.payment.cosmos.OrderInvoice invoice);
}

通過這種方式,您被指示 MapStruct 使用map(List<>)將發票轉換為單個 OrderInvoice 和抽象map(OrderInvoice)以讓 MapStruct 自動生成映射代碼。

代碼未經測試,因為我今天沒有限制空閑時間,但我希望我的示例可能有用;如果有任何錯誤,請隨時發表評論,我會盡快更正代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM