gpt4 book ai didi

mapStruct:将列表映射到其他列表?

转载 作者:行者123 更新时间:2023-12-01 13:30:16 54 4
gpt4 key购买 nike

我有一个 list List<Payment>我想映射到另一个列表 List<PaymentPlan> .这些类型如下所示:

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 知道如何映射 List 类型的每个字段,如下所示:
@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".

显然我做了一些完全错误的事情,因为听起来它甚至无法识别 List 的类型。

我怎样才能基本上从一个列表映射到另一个类似的列表?显然我需要结合不同的映射策略。

顺便说一句:我知道如何使用表达式映射来做到这一点,比如......
@Mapping(target = "paymentPlans",expression="java(Helper.mapManually(payments))")
但我想 MapStruct 可以自己处理这个。

最佳答案

我想您使用的是版本 1.1.0.Final .您的额外映射是正确的,唯一的区别是您需要定义一个没有列表的映射,然后 MapStruct 将使用它来进行映射(示例消息对集合有点误导)。

PaymentPlan paymentToPaymentPlan(Payment payment);

您甚至不需要 @Mappings因为它们会被自动映射。您可能还需要为 Instalment 定义方法。 (因为它们在不同的包中)。

如果您切换到 1.2.0.CR2,那么 MapStruct 可以自动为您生成方法。

关于mapStruct:将列表映射到其他列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46285086/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com