public class SimpleDTO{
private String firstElement;
private String lastElement;
}
public class ComplexSource{
private List<String> elementList;
}
我尝试使用map().setFirstElement(source.getElementList().get(0))
映射它,但是我收到错误声明&#34; 1)无效的源方法java.util.List.get()。确保该方法的参数为零,并且不返回void。&#34;
如何使用ModelMapper或任何其他替代方法将列表中的元素映射到Pojo中的字段?
答案 0 :(得分:1)
在这种情况下,您无法使用regexp_replace()
。如果您想使用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]
尊重您的注释,如果源实例中需要空值,则需要检查空值(在这种情况下,如果列表为空,则可能为空指针)。但它会为您提供目标实例,即使您可以使用ComplexSource complexSource = new ComplexSource();
complexSource.setElementList(Arrays.asList("firstElement", "lastElement"));
SimpleDTO simpleDto = mapper.map(complexSource, SimpleDTO.class);
System.out.println(simpleDto);
(Providers documentation)配置目标实例的方式。
在这种特殊用例的情况下,你需要担心空检查和异常处理,因为我会说Provider
是模型映射器手动映射pojos的方式。
使用ModelMapper的优点在其网站中进行了解释: