Decoratorを使うことでマッピングをカスタマイズすることができる。
環境
- MapStruct : 1.2.0.Final
- Java : 9
- JUnit : 4.12
- AssertJ : 3.9.1
Mapperの作成
@DecoratedWith
にDecoratorクラスを指定する。
@Mapper
@DecoratedWith(PersonMapperDecorator.class)
public interface PersonMapper {
PersonMapper MAPPER = Mappers.getMapper(PersonMapper.class);
Person toPerson(PersonEntity entity);
}
Decoratorの作成
抽象クラスで作成する。
上記で作成したMapperを実装し、任意のメソッドをカスタマイズする。
public abstract class PersonMapperDecorator implements PersonMapper {
private final PersonMapper delegate;
public PersonMapperDecorator(PersonMapper delegate) {
this.delegate = delegate;
}
@Override
public Person toPerson(PersonEntity entity) {
Person dto = delegate.toPerson(entity);
dto.setName(dto.getName().toUpperCase());
return dto;
}
}
テスト
@Test
public void test() {
PersonEntity entity = new PersonEntity();
entity.setName("curry");
Person person = PersonMapper.MAPPER.toPerson(entity);
assertThat(person.getName()).isEqualTo("CURRY");
}