@Context
パラメータを使用して、独自のカスタムメソッドを使用することができる。
環境
Mapper
@Mapper public interface ContextMapper { ContextMapper MAPPER = Mappers.getMapper(ContextMapper.class); PersonEntity toPersonEntity(Person person); PersonEntity toPersonEntity(Person person, @Context Locale locale); default String uppercase(String name, @Context Locale locale) { return name.toUpperCase(locale); } }
生成されたMapper @Context パラメータがないメソッドにカスタムメソッドが適用されていないことがわかる。
/* @Generated( value = "org.mapstruct.ap.MappingProcessor", date = "2018-03-14T22:43:19+0900", comments = "version: 1.2.0.Final, compiler: javac, environment: Java 9.0.1 (Oracle Corporation)" ) */ public class ContextMapperImpl implements ContextMapper { @Override public PersonEntity toPersonEntity(Person person) { if ( person == null ) { return null; } PersonEntity personEntity = new PersonEntity(); personEntity.setName( person.getName() ); personEntity.setAge( person.getAge() ); return personEntity; } @Override public PersonEntity toPersonEntity(Person person, Locale locale) { if ( person == null ) { return null; } PersonEntity personEntity = new PersonEntity(); personEntity.setName( uppercase( person.getName(), locale ) ); personEntity.setAge( person.getAge() ); return personEntity; } }
テストコード
@Test public void test1() { Person person = new Person("curry", 30); PersonEntity entity = ContextMapper.MAPPER.toPersonEntity(person, Locale.JAPAN); assertThat(entity.getName()).isEqualTo("CURRY"); assertThat(entity.getAge()).isEqualTo(30); } @Test public void test2() { Person person = new Person("curry", 30); PersonEntity entity = ContextMapper.MAPPER.toPersonEntity(person); assertThat(entity.getName()).isEqualTo("curry"); assertThat(entity.getAge()).isEqualTo(30); }