Mat*_*rix 4 java mapping dto modelmapper
public class SimpleDTO{
private String firstElement;
private String lastElement;
}
public class ComplexSource{
private List<String> elementList;
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用映射它,map().setFirstElement(source.getElementList().get(0))但收到错误消息“1) 无效的源方法 java.util.List.get()。确保该方法有零个参数并且不返回 void。”
如何使用 ModelMapper 或任何其他替代方案将列表中的元素映射到 Pojo 中的字段?
在这种情况下,您不能使用PropertyMap. 如果您想使用它进行映射,ModelMapper则必须使用 aConverter而不是像PropertyMap您所做的那样。
首先,您的转换器将是下一个,并且source是目的地:ComplexSourceSimpleDTO
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;
}
};
Run Code Online (Sandbox Code Playgroud)
然后您只需将转换器添加到您的ModelMapper实例中:
ModelMapper mapper = new ModelMapper();
mapper.addConverter(converter);
Run Code Online (Sandbox Code Playgroud)
如果你尝试一下地图,它会完美地工作:
ComplexSource complexSource = new ComplexSource();
complexSource.setElementList(Arrays.asList("firstElement", "lastElement"));
SimpleDTO simpleDto = mapper.map(complexSource, SimpleDTO.class);
System.out.println(simpleDto);
Run Code Online (Sandbox Code Playgroud)
输出
SimpleDTO [firstElement=firstElement, lastElement=lastElement]
尊重您的评论,您需要检查源实例中是否需要空值(在这种情况下,如果列表为空,则可能是空指针)。但它会为您初始化目标实例,甚至您可以使用您想要的方式配置目标实例Provider(提供程序文档)。
在像这样的特殊用例的情况下,您需要担心空检查和异常处理,因为Converter我想说的是 modelmapper 手动映射 pojo 的方式。
使用 ModelMapper 的优点在其网站上有解释:
| 归档时间: |
|
| 查看次数: |
7778 次 |
| 最近记录: |