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 添加额外的导入。
我们已经(非常模糊)计划为这样的表达式支持一种实际的脚本语言,但我们还没有做到:)
我正在使用 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 添加额外的导入。
我们已经(非常模糊)计划为这样的表达式支持一种实际的脚本语言,但我们还没有做到:)