2017-04-06 1 views
0

私はコレクションを唯一のプロパティとして持つCXF生成クラスを持っています。 DTOの単一の値を次のようにそのコレクションの要素にマップする必要があります。Listプロパティの最初の要素にStringプロパティをマップする方法<String>プロパティ?

class DTO { 
    String dto; 
} 

class A { 
    String a; 
} 

class B { 
    List<A> b; 
} 

interface Mapper { 
    @Mappings({ 
     @Mapping(source="dto", target="b.a") 
    }) 
    B getBfromDTO(DTO dto); 
} 

これは本当に機能しますか? もしそうなら、どのようにこのマッピングを設定できますか?

+0

[マッピングのリストを表示するMapStruct文字列](http://stackoverflow.com/questions/37143179/mapstruct-string-to-list-mapping)の可能性の重複 – Wolfie

答えて

0

マッピングとしてこれを行う方法が見つからず、@ Gunnarの他の回答から、これは不可能であると理解しましたが、注釈@AfterMappingを使用する回避策が見つかりました。

@AfterMappingマッピングが実行された後に実行するメソッドを指定できるようにするため、オブジェクトの非コレクションプロパティのマッピングを作成し、オブジェクトのコレクションを塗りつぶすために@AfterMappingを作成しました。

class DTO { 
    String a; 
    String x; 
} 

class A { 
    String a; 
} 

class B { 
    String x; 
    List<A> b; 
} 

abstract class Mapper { 
    @Mappings({ 
     @Mapping(source="x", target="x") 
    }) 
    protected abstract B getBfromDTO(DTO dto); 

    @AfterMapping 
    protected void fillCollections(DTO dto, @MappingTarget B b) { 
     b.getB().add(dto.a); 
    } 
} 
関連する問題