マッピングメソッドに3つのパラメータがあり、3つすべてがターゲットタイプのプロパティの1つを取得する際に使用されている状況があります。複数のパラメータを持つMapStruct QualifiedByName
私はこのメソッドを呼び出すためのプロパティを取得するためのロジックを保持したままインターフェイスにデフォルトのマッピングメソッドを作成しましたが、@Mapping
注釈でexpression = "java(/*method call here*/)"
を使用できます。
mapstruct注釈のような@qualifiedByName
のいずれかと、私は表現性を有する注釈をコメントしようとしたqualifiedByNameを使用し、これを行うにはどのような方法がありますが、それは動作しません:
@Mapper
public interface OneMapper {
@Mapping(target="id", source="one.id")
//@Mapping(target="qualified",expression = "java(checkQualified (one, projId, code))")
@Mapping(target="qualified",qualifiedByName="checkQualifiedNamed")
OneDto createOne (One one, Integer projId, Integer val, String code);
@Named("checkQualifiedNamed")
default Boolean checkQualified (One one, Integer projId, Integer val, String code) {
if(one.getProjectId() == projId && one.getVal() == val && one.getCode().equalsIgnoreCase(code)) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}
入力のおかげで@Filip:あなたは、その後のようなマッパーを呼び出すことができます
:あなたのマッパーは、次にようになります
これは私が必要とするものに非常に近いようですが、私がここに直面しているもう一つの問題があります。実際のプロジェクトには、4つのパラメータ、1つのエンティティオブジェクトと3つのサポートプロパティ、3つのsup portingプロパティがIntegerであり、同じタイプの複数のコンテキストが存在しない場合、Contextとしてエンティティを作成し、Integerの1つをソースとして保持しようとしましたが、エンティティ内の他のすべての属性を無視します。 私はあなたのために何かを提案できる場合、私の質問でコードスニペットを更新しましたか? –
私は答えを更新しました。基本的には、すべてのプロパティを '@ Context'を表すラッパークラスに置き換えることができます。それははるかに強力で、あなたは物事を実行することができます。 [渡すコンテキスト/状態オブジェクト]のドキュメントを見てください(http://mapstruct.org/documentation/stable/reference/html/#passing-context) – Filip
私のアプリケーションでは、フィルタ目的のための新しいクラスを定義することができますしかし、私は実現可能性をチェックし、Expressionを使用するかFilerを定義するかのどちらかを決定します。あなたの努力と時間をありがとう。 –