web-dev-qa-db-ja.com

MapStructは自動的にマップされていないプロパティを無視します

コード内のさまざまなビジネスユースケース間で共有される大きなモデル(50を超えるフィールド)でMapStructを使用しています。エントリポイントに応じて、一部のプロパティはマップされ、一部はマップされません。プロジェクトをビルドすると、常に「警告:マップされていないターゲットプロパティ」メッセージが表示されます。

私は調査し、セマンティックを使用してフィールドを無視するようにmapstructに指示することが可能であることを見ました

@Mapping(target = "propName", ignore = true)

問題は、オブジェクトに非常に多くのフィールドがある場合、各マッパークラスの各プロパティを無視するには多くのコードが必要になることです。また、ログにこの警告が表示されないようにします。このメッセージを回避して、マップされていないものを無視するようにmapstructに指示する方法はありますか?

25

@Mapperレベルまたは@MapperConfig経由で「マップされていないターゲットポリシー」を設定して、複数のマッパー間で設定を共有できます。

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MyMapper {}
49
Gunnar

MapStruct 1.3.0.Final Reference Guideの自動マッピングを無視する場合:

@BeanMapping(ignoreByDefault = true)を使用すると、デフォルトの動作は明示的なマッピングになります。つまり、すべてのマッピングは@Mappingを使用して指定する必要があり、ターゲットプロパティがない場合に警告は発行されません。

@BeanMapping(ignoreByDefault = true)
OneObj map(TwoObj two);
2