2017-09-18 4 views
0

リストList<Payment>私は別のリストList<PaymentPlan>にマップしたいと思います。mapStruct:リストを他のリストにマップしますか?

public class Payment { 

    @XmlElement(name = "Installment") 
    @JsonProperty("Installment") 
    private List<Installment> installments = new ArrayList<>(); 

    @XmlElement(name = "OriginalAmount") 
    @JsonProperty("OriginalAmount") 
    private BigDecimal originalAmount; 

//getters setters, more attributes 
} 

と....

public class PaymentPlan { 
    //(Installment in different package) 
    private List<Installment> installments; 

    @XmlElement(name = "OriginalAmount") 
    @JsonProperty("OriginalAmount") 
    private BigDecimal originalAmount; 

//getters setters, more attributes 
} 

が、私はこのような何かが働いていることを期待...

@Mappings({ 
    @Mapping(//other mappings...), 
    @Mapping(source = "payments", target = "paymentInformation.paymentPlans") 
}) 
ResultResponse originalResponseToResultResponse(OrigResponse originalResponse); 

...しかし、私は得る:これらのタイプは、次のようになります。

Can't map property java.util.List<Payment> to java.util.List<PaymentPlan>. 
Consider to declare/implement a mapping method java.util.List<PaymentPlan> map(java.util.List<Payment> value); 

これを適用する方法がわかりません形成。まず、私はしかし私はMapStructはこのようなリストの種類の各フィールドにマッピングする方法を知っているので、リストの(同じマッパークラスで)いくつかの余分なマッピングを宣言する必要があります:

@Mappings({ 
    @Mapping(source = "payment.originalAmount", target = "paymentInformation.paymentPlan.originalAmount") 
}) 
List<PaymentPlan> paymentToPaymentPlan(List<Payment> payment); 

を...しかし、私はエラーを取得します

The type of parameter "payment" has no property named "originalAmount". 

明らかに私は何かを完全に間違っています。なぜなら、リストのタイプさえ認識しないように思えるからです。

私は基本的に1つのリストから別の同様のリストにマップできますか?明らかに私はどうにかして別のマッピング戦略を組み合わせる必要があります。

はところで:私は

@Mapping(target = "paymentPlans",expression="java(Helper.mapManually(payments))")

...表現マッピング、などでそれを行う方法を知っているが、私はMapStructがiselfことで、これを扱うことができますね。

答えて

2

バージョン1.1.0.Finalを使用しているとします。あなたの余分なマッピングは正しいですが、唯一の違いは、リストなしでマッピングを定義する必要があるという点です。MapStructはそれを使ってマッピングを行います(例のメッセージはコレクションにとって誤解を招きます)。

PaymentPlan paymentToPaymentPlan(Payment payment); 

自動的にマップされるので、@Mappingsは必要ありません。 Instalmentのメソッドを定義する必要があるかもしれません(パッケージが異なるため)。

1.2.0.CR2に切り替えると、MapStructによって自動的にメソッドが生成されます。

+0

わかりました。それは今、thxで動作します。 – Bevor

関連する問題