4
public class SimpleDTO{
    private String firstElement;
    private String lastElement;
}

public class ComplexSource{
    private List<String> elementList;
}

を使用してマップしようとしましmap().setFirstElement(source.getElementList().get(0))たが、「1) ソース メソッド java.util.List.get( が無効です。メソッドのパラメーターがゼロであり、void を返さないことを確認してください。」というエラーが表示されます。

ModelMapper またはその他の代替手段を使用して、リスト内の要素を Pojo 内のフィールドにマップするにはどうすればよいですか?

4

1 に答える 1

5

この場合、 は使用できませんPropertyMap。を使用してマップする場合は、これまでのように代わりにa を使用ModelMapperする必要があります。ConverterPropertyMap

最初に、コンバーターは次のようになり、宛先は次のとおりですsourceComplexSourceSimpleDTO

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]


コメントを尊重してください。ソース インスタンスで必要な場合は null を確認する必要があります (この場合、リストが null の場合は null ポインターである可能性があります)。ただし、目的のインスタンスを初期化しますが、必要に応じて目的のインスタンスを構成することもできますProvider( Providers documentation )。

このような特別なユースケースの場合、null チェックと例外処理について心配する必要があります。これConverterは、modelmapper が pojo を手動でマップする方法だと言えます。

ModelMapper を使用する利点は、その Web で説明されています。

  • 場合によっては正しく構成すれば、マップを手動で行う必要はありません。
  • マッピングを集中化します。
  • 特別なユース ケースを処理するためのマッピング API を提供します。(これはあなたの場合です)
  • など(ウェブを見てください)
于 2016-11-11T05:50:04.857 に答える