@Qualifier
を使うことでアノテーションで独自の変換処理を追加することができる。
環境
変換するクラスを用意する
public class Characters { public String upperCase(String string) { return (string == null) ? null : string.toUpperCase(); } }
アノテーションの作成
@Qualifier を合成したアノテーションを作成する。
@Qualifier @Retention(CLASS) @Target(TYPE) public @interface CharacterConverter { }
@Qualifier @Retention(CLASS) @Target(METHOD) public @interface ToUpper { }
アノテーションの付与
@CharacterConverter public class Characters { @ToUpper public String upperCase(String string) { return (string == null) ? null : string.toUpperCase(); } }
Mapperの作成
nameを大文字にする。
@Mapper(uses = Characters.class) public interface QualifierMapper { QualifierMapper MAPPER = Mappers.getMapper(QualifierMapper.class); @Mapping(target = "name", qualifiedBy = { CharacterConverter.class, ToUpper.class }) Student toStudent(StudentEntity entity); }
テストコード
@Test public void test() { StudentEntity entity = new StudentEntity("curry", 30, "gsw"); Student student = QualifierMapper.MAPPER.toStudent(entity); assertThat(student.getName()).isEqualTo("CURRY"); assertThat(student.getAddress()).isEqualTo("gsw"); assertThat(student.getAge()).isEqualTo(30); }