2016-11-10 18 views
1
public class SimpleDTO{ 
    private String firstElement; 
    private String lastElement; 
} 

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

私はmap().setFirstElement(source.getElementList().get(0))を使用して、それをマップしようとしたPOJOのフィールドに、リスト内の要素の地図が、私は、1)無効なソース方式java.util.List.get()」というエラーを取得し、その方法を確認してください。パラメータがゼロであり、voidを返しません。Modelmapperは:

ModelMapperやその他の方法を使用して、リストの要素をPojoのフィールドにマップするにはどうすればよいですか?

答えて

1

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

まずあなたConverterは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); 

の場合あなたは地図を試して、それは完全に動作します:

​​

出力

SimpleDTO [firstElement = firstElement、lastElement = lastElement]


あなたのコメントを尊重し、あなたはそれが(であなたのソース・インスタンスに必要されている場合NULLをチェックする必要がありますこの場合、リストがnullの場合はnullポインタが可能です)。しかし、それは目的地インスタンスのためにあなたの目的地を設定することができますProviderProviders documentation)とどのようにすることができます。

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

advantadgesは、そのウェブで説明されています:あなたはいくつかのケースで正しく設定している場合には、手動でマップを実行する必要が

  • ではありません。
  • マッピングを集中管理します。
  • 特殊な使用事例を処理するためのマッピングAPIを提供します。
  • (これはあなたのケースである)などが
+1

おかげで(見てそのwebを取ります)!接線問題、ModelMapperを使う利点と単純なマッパーメソッドを使ってあるオブジェクトを別のオブジェクトに変換する利点は何ですか?私は、サードパーティのマッパーでヌルチェックや例外処理について心配する必要はないと思っていましたが、私の仮定が間違っているようです。 – Matrix

+0

@Matrixコメントを投稿して回答しました – Pau

関連する問題