weblog

技術的なメモ置き場。

MapStruct

Kotlinでdataクラスのマッピング

Kotlinでdataクラスのマッピングするためのメモ。 Beanマッピングでおなじみの(?)MapStructを使用する。 Kotlin: 1.3.61 MapStruct: 1.3.1.Final MapStruct 公式サイトにKotlinのサンプルがある。 github.com build.gradleに以下を追加する。 dependencie…

【MapStruct】BeforeMappingとAfterMapping

BeforeMappingとAfterMappingでマッピング前後の処理を追加できる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Mapperの作成 @Mapper public abstract class PersonMapper { @BeforeMapping protected void before(PersonEntity …

【MapStruct】Decoratorを使う

Decoratorを使うことでマッピングをカスタマイズすることができる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Mapperの作成 @DecoratedWith にDecoratorクラスを指定する。 @Mapper @DecoratedWith(PersonMapperDecorator.class…

【MapStruct】 @MappingConfig で共通設定

@MappingConfig でMapperの共通設定をするConfigクラスを作成できる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Configクラスの作成 @MapperConfig(unmappedTargetPolicy = ReportingPolicy.IGNORE , nullValueMappingStrategy …

【MapStruct】Mappingを継承する

@InheritConfiguration または @InheritInverseConfiguration を使うことでマッピングを継承することができる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Mapperの作成 @Mapper public interface PersonMapper { PersonMapper M…

【MapStruct】Expression を使う

Expressionを使うことで、任意のJavaコードをマッピングの際に実行できる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Mapperの作成 expression に実行したいJavaコードを記述する。その際、 java() で囲む。 @Mapper public int…

【MapStruct】デフォルト値と定数を設定する

マッピングする値がnullの場合のデフォルト値と定数の設定ができる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Mapperの作成 デフォルト値は defaultValu, 定数は constant に指定する。 @Mapper public interface DefaultConst…

【MapStruct】Object Factory を使う

Object Factoryを使って、マッピングするオブジェクトを生成することができる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Object Factoryの作成 public class StudentFactory { public Student createStudent() { Student stude…

【MapStruct】 Enum同士のマッピング

Enumを違う型のEnumに変換することができる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Mapperの作成 @ValueMapping でマッピングする識別子を指定する。 @Mapper public interface SizeMapper { SizeMapper MAPPER = Mappers.g…

【MapStruct】 @Qualifierを使う

@Qualifier を使うことでアノテーションで独自の変換処理を追加することができる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 変換するクラスを用意する public class Characters { public String upperCase(String string) { re…

【MapStruct】@Context を使う

@Context パラメータを使用して、独自のカスタムメソッドを使用することができる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Mapper @Mapper public interface ContextMapper { ContextMapper MAPPER = Mappers.getMapper(Conte…

【MapStruct】参照型オブジェクトのマッピング

ネストされた参照型クラスのマッピングメソッドがある場合は、自動的にネストしているクラスのマッピングでそのマッピングが使用される。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 Mapper StudentにネストされているPersonのマ…

【MapStruct】暗黙的な型変換

今回は暗黙的な型変換についてまとめる。 異なる型のフィールドにマッピングする際に暗黙的な型変換が行われる。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 使用するBean public class Dto { private int intValue; private long…

【MapStruct】コンポーネントモデルを指定する

Mapperのコンポーネントモデルを指定することができる。 今回はSpring FrameworkでDIできるようにする。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 @Mapper のcomponentModel属性を使う @Mapper のcomponentModel属性に spring …

【MapStruct】Beanマッピング(基本編)

基本編。 環境 MapStruct : 1.2.0.Final Java : 9 JUnit : 4.12 AssertJ : 3.9.1 使用するBean public class Person { private String name; private int age; // constructor/getter/setter } public class PersonEntity { private String name; private in…