weblog

技術的なメモ置き場。

【MapStruct】Expression を使う

Expressionを使うことで、任意のJavaコードをマッピングの際に実行できる。

環境

  • MapStruct : 1.2.0.Final
  • Java : 9
  • JUnit : 4.12
  • AssertJ : 3.9.1

Mapperの作成

expression に実行したいJavaコードを記述する。その際、 java() で囲む。

@Mapper
public interface ExpressionMapper {
    ExpressionMapper MAPPER = Mappers.getMapper(ExpressionMapper.class);

    @Mapping(target = "name", expression = "java(org.springframework.util.StringUtils.capitalize(entity.getName()))")
    Student toStudent(StudentEntity entity);
}

テストコード

@Test
public void test() {
    StudentEntity entity = new StudentEntity();
    entity.setName("curry");

    Student student = ExpressionMapper.MAPPER.toStudent(entity);

    assertThat(student.getName()).isEqualTo("Curry");
}

expression にパッケージ名から記述したくない場合は、 imports を使用して省略することができる。

@Mapper(imports = StringUtils.class)
public interface ExpressionMapper {

    @Mapping(target = "name", expression = "java(StringUtils.capitalize(entity.getName()))")
    Student toStudent(StudentEntity entity);
}