2017-09-18 6 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". 

같은 메시지는 분명 내가 완전히 잘못 뭔가.

기본적으로 하나의 목록에서 다른 유사한 목록으로 매핑 할 수 있습니까? 분명히 어떻게 든 다른 매핑 전략을 결합해야합니다.

은 BTW : 나는

@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

나는 알고 있습니다. 이제 작동합니다. – Bevor