gpt4 book ai didi

spring-boot - MapStruct 向 dto 添加一个新的计算字段

转载 作者:行者123 更新时间:2023-12-01 08:49:34 26 4
gpt4 key购买 nike

我正在尝试映射一个实体 OrderOrderDTO使用 MapStruct。我想添加到OrderDTO一个新字段total ,该字段在原始实体 Order 中不可用并且应该使用 Order 中提供的信息进行计算(订单条目价格、数量、税收......)。
我创建了一个新字段 totalOrderDTO我正在尝试通过向映射器接口(interface)添加默认方法来映射它:

public interface OrderMapper {

...

default BigDecimal orderToTotal(Order order){
return logicToCalculateTotal();
}
}

当我午餐构建 MapStruct 启动错误

Unmapped target property: "total".



知道如何解决这个问题吗?

谢谢

最佳答案

有多种方法可以实现您所需要的。第一种方法是使用@AfterMapping@BeforeMapping .如果你这样做,你的代码将如下所示:

public interface OrderMapper {

@Mapping(target = "total", ignore = true) // Needed so the warning does not shown, it is mapped in calculateTotal
OrderDto map(Order order);

@AfterMapping // or @BeforeMapping
default void calculateTotal(Order order, @MappingTarget OrderDto dto) {
dto.setTotal(logicToCalculateTotal());
}
}

另一种方法是像你开始那样做,但你必须说 total映射自 Order .

您在替代方法中的映射器将是:
public interface OrderMapper {

@Mapping(target = "total", source = "order")// the source should be equal to the property name
OrderDto map(Order order);

default BigDecimal orderToTotal(Order order) {
return logicToCalculateTotal();
}
}

关于spring-boot - MapStruct 向 dto 添加一个新的计算字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45500779/

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