В этом случае вы не можете использовать 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);
Если вы попробуете карту, она отлично работает:
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]
Уважайте ваш комментарий, вам нужно проверить нули, если это необходимо в вашем исходном экземпляре (в этом случае возможен нулевой указатель, если список равен нулю). Но он создает для вас целевой экземпляр, даже если вы можете настроить целевой экземпляр, как хотите, с помощью Provider
(Документация поставщика).
В таких особых случаях использования, как этот, вам нужно беспокоиться о проверках на null и обработке исключений, потому что Converter
я бы сказал, что это способ modelmapper отображать вручную pojos.
Преимущества использования ModelMapper описаны в его сети:
- При правильной настройке в некоторых случаях нет необходимости делать карту вручную.
- Он централизует отображение.
- Он предоставляет API-интерфейс сопоставления для обработки особых случаев использования. (Это ваш случай)
- И так далее (взгляните на его Интернет)
person
Pau
schedule
11.11.2016