Mapstruct - 使用数学公式映射字段(例如 target="x", source="a+b")

Mapstruct - mapping field using a mathematical formula (e.g. target="x", source="a+b")

我正在使用 mapstrcut 将我的实体映射到 dto,我现在面临一个问题,在 DTO 中有一个额外的字段 "discount",我需要 mapstruct 来管理填充这个字段,并且此字段是根据 2 个值(salePrice 和 retailPrice)计算的。

我的问题是如何使用 mapstruct 进行这种映射。

@Mapping(target="discount", source="retailPrice-salePrice")

当我尝试添加这一行时,构建时代码中断:

 error: No property named "salePrice*retailPrice" exists in source parameter(s).
            @Mapping(source="salePrice*retailPrice", target="discount")

那么我该如何做这样的映射呢?

您可以在以下情况下使用 Java expressions 的功能:

@Mapping( target="discount", expression="java( source.getRetailPrice() - source.getSalePrice())" )

给定的 "expression" 将按原样添加到生成的代码中。如果需要,您可以通过 @Mapper#imports() 向生成的 class 添加额外的导入。

我们已经(非常模糊)计划为这样的表达式支持一种实际的脚本语言,但我们还没有做到:)