環境
Mapperの作成
@ValueMapping
でマッピングする識別子を指定する。
@Mapper public interface SizeMapper { SizeMapper MAPPER = Mappers.getMapper(SizeMapper.class); @ValueMapping(source = "SMALL", target = "SHORT") @ValueMapping(source = "MEDIUM", target = "TALL") @ValueMapping(source = "LARGE", target = "GRANDE") SBSize toSBSize(Size size); }
生成されたMapper
/* @Generated( value = "org.mapstruct.ap.MappingProcessor", date = "2018-03-17T22:54:45+0900", comments = "version: 1.2.0.Final, compiler: javac, environment: Java 9.0.1 (Oracle Corporation)" ) */ public class SizeMapperImpl implements SizeMapper { @Override public SBSize toSBSize(Size size) { if ( size == null ) { return null; } SBSize sBSize; switch ( size ) { case SMALL: sBSize = SBSize.SHORT; break; case MEDIUM: sBSize = SBSize.TALL; break; case LARGE: sBSize = SBSize.GRANDE; break; default: throw new IllegalArgumentException( "Unexpected enum constant: " + size ); } return sBSize; } }
テストコード
@Test public void test1() { SBSize sbSize = SizeMapper.MAPPER.toSBSize(Size.SMALL); assertThat(sbSize).isEqualTo(SBSize.SHORT); } @Test public void test2() { SBSize sbSize = SizeMapper.MAPPER.toSBSize(Size.LARGE); assertThat(sbSize).isEqualTo(SBSize.GRANDE); }
MappingConstants
を使うことでnullまたはデフォルト値を指定することもできる。
@ValueMapping(source = "VENTI", target = MappingConstants.NULL) @ValueMapping(source = MappingConstants.ANY_REMAINING, target = "LARGE") Size toSize(SBSize sbSize);
生成されたコード
@Override public Size toSize(SBSize sbSize) { if ( sbSize == null ) { return null; } Size size; switch ( sbSize ) { case VENTI: size = null; break; default: size = Size.LARGE; } return size; }