この場合、 は使用できませんPropertyMap
。を使用してマップする場合は、これまでのように代わりにa を使用ModelMapper
する必要があります。Converter
PropertyMap
最初に、コンバーターは次のようになり、宛先は次のとおりですsource
。ComplexSource
SimpleDTO
Converter<ComplexSource, SimpleDTO> converter = new AbstractConverter<ComplexSource, SimpleDTO>() {
@Override
protected SimpleDTO convert(ComplexSource source) {
SimpleDTO destination = new SimpleDTO();
List<String> sourceList = source.getElementList();
if(null != sourceList && !sourceList.isEmpty()){
int sizeList = sourceList.size();
destination.setFirstElement(sourceList.get(0));
destination.setLastElement(sourceList.get(sizeList - 1));
}
return destination;
}
};
ModelMapper
次に、コンバーターをインスタンスに追加するだけです。
ModelMapper mapper = new ModelMapper();
mapper.addConverter(converter);
マップを試すと、完全に機能します。
ComplexSource complexSource = new ComplexSource();
complexSource.setElementList(Arrays.asList("firstElement", "lastElement"));
SimpleDTO simpleDto = mapper.map(complexSource, SimpleDTO.class);
System.out.println(simpleDto);
出力
SimpleDTO [firstElement=firstElement, lastElement=lastElement]
コメントを尊重してください。ソース インスタンスで必要な場合は null を確認する必要があります (この場合、リストが null の場合は null ポインターである可能性があります)。ただし、目的のインスタンスを初期化しますが、必要に応じて目的のインスタンスを構成することもできますProvider
( Providers documentation )。
このような特別なユースケースの場合、null チェックと例外処理について心配する必要があります。これConverter
は、modelmapper が pojo を手動でマップする方法だと言えます。
ModelMapper を使用する利点は、その Web で説明されています。
- 場合によっては正しく構成すれば、マップを手動で行う必要はありません。
- マッピングを集中化します。
- 特別なユース ケースを処理するためのマッピング API を提供します。(これはあなたの場合です)
- など(ウェブを見てください)