1

mapstrcut を使用してエンティティを dto にマップしていますが、DTO に「割引」という余分なフィールドがあり、このフィールドへの入力を管理するには 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")

では、どうすればそのようなマッピングを行うことができますか?

4

1 に答える 1

6

次のような状況では、 Java 式の機能を使用できます。

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

与えられた「式」は、生成されたコードにそのまま追加されます。必要に応じて、生成されたクラスに追加のインポートを追加でき@Mapper#imports()ます。

このような式の実際のスクリプト言語をサポートするための (非常に漠然とした) 計画がありますが、まだ実現していません :)

于 2016-07-06T13:37:07.963 に答える