Modelmapper:将列表中的元素映射到POJO

时间:2016-11-10 21:25:29

标签: java mapping dto modelmapper

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中的字段?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您无法使用regexp_replace()。如果您想使用PropertyMap进行映射,则必须使用ModelMapper代替Converter

首先,您的转换器将成为下一个PropertyMapsourceComplexSource为目标的地方:

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的优点在其网站中进行了解释:

  • 如果在某些情况下正确配置,则无需手动执行地图。
  • 它集中了映射。
  • 它提供了一个用于处理特殊用例的映射API。 (这是你的情况)
  • 等等(看看它的web