在這種情況下,您不能使用PropertyMap
。如果您想使用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);
如果你試試地圖吧,它完美的作品:
輸出
SimpleDTO [firstElement = firstElement,是以lastElement =是以lastElement]
尊重你的意見,你需要檢查零點如果需要在源實例(這種情況下,如果列表爲空,則可能爲空指針)。但它可以爲您提供目標實例,即使您可以使用Provider
(Providers documentation)配置目標實例的方式。
在這種特殊用例的情況下,您需要擔心空檢查和異常處理,因爲Converter
我認爲是modelmapper手動映射pojos的方式。
使用ModelMapper的advantadges在其網站解釋:
- 如果你在某些情況下,正確地配置它,它是不需要手動做圖。
- 它集中了映射。
- 它提供了一個用於處理特殊用例的映射API。 (這是你的情況下)
- 等等(看看它的web)
來源
2016-11-11 05:50:04
Pau
謝謝!切線問題,使用ModelMapper vs使用簡單映射器方法將一個對象轉換爲另一個對象的優點是什麼?我假定我不必擔心用第三方映射器進行空檢查和異常處理,但似乎我錯了我的假設。 – Matrix
@Matrix我已在回覆中發表您的評論 – Pau