2017-06-15 8 views
0

マッパーをこのようにしたいと思います。マッパーの1つのメソッドは、ロールフィールドを無視する必要があります。異なった無視フィールドで同じオブジェクトを複数回マップする

@Mapper 
public interface UserMapper 
{ 
     UserDTO userToUserDTO(User user); 

     @Mapping(target = "roles", ignore = true) 
     UserDTO userToUserDTOWithoutRoles(User user); 

} 

私は、コンパイル時間中にこのエラーAmbiguous mapping methods found for mapping collection element to UserDTOを持っています。私はちょうど役割フィールドを除去するための別のDTOを作成する必要はありません 、私はデフォルトのメソッドを追加することができ、多分よりよい解決策はあり...

+0

どの方法でエラーが発生しますか?どのバージョンのMapStructを使用していますか? – Filip

答えて

0

エラーのための3つの可能性があります。

は、最初に:あなたに依存している他のマッパーがありますUserMapper

また、表示していないメソッドがあります。このような場合、MapStructは他のメソッドのマッピングに定義されたメソッドの1つを使用しようとします。

私はデフォルトとして1つの方法を持ち、他の方法は手動または明示的に使用する必要があると思います。そのためには、MapStruct @Named/@QualifierMapping#qualifiedByName/Mapping#qualifiedByを使用する必要があります。

あなたのマッパーは、次のようになりする必要があります。

@Mapper 
public interface UserMapper { 

    @Named("detailedUser") 
    UserDTO userToUserDTO(User user); 

    @Mapping(target = "roles", ignore = true) 
    UserDTO userToUserDTOWithoutRoles(User user); 
} 

あなたがこれを持っている場合は、あなたのUserMapperを使用する他のすべてのマッパーが既定あたりuserToUserDTOWithoutRolesを使用します。他の方法を使用するためには次のように何かをする必要があります。

@Mapper(uses = { UserMapper.class}) 
public interface OtherMapper { 

    @Mapping(source = "user", target = "user", qualifiedByName = "detailedUser") 
    OtherDTO map(Other other); 
} 

は、この詳細については Mapping methods based on qualifiersを見てください。

第二:あなたはこれも最初のアプローチで解決することができ、あなたのUser

にユーザーのIterable/Mapを持っています。しかし、ここではサイクリック依存関係がありますので、新しい@Contextを1.2.0から試してみてください。 mapstruct-mapping-with-cyclesの例を見てください。

3番目は1.2.0を使用しており、Userの一部のBeanはUserを参照しています。

これが事実であるならば、生成されたクラスMapStructに豆とMapStruct間のマッピング方法を生成しようとしますが、それは豆でUser Sをマッピングするために使用できる方法を探しますとAmbiguous mapping methods...になります。

この解決方法は、2番目の解決方法と同じです。

+0

私は別のメソッド 'List userDTOsToUsers(リスト userDTOs);'メソッド 'UserDTO userToUserDTO(User user); 'を使うべきです。 'UserDTO userToUserDTOWithoutRoles(User user);を追加すると'実装は 'userToUserDTO'や' userToUserDTOWithoutRoles'を使うべきかどうかわかりません。おそらく修飾子を追加すると助けになります –

+0

'UserMapper'を使う他のマッパーはどうすればいいですか? ?そして、修飾子を追加するのは正しいアプローチです。他のマッパーが使うべきことを教えたら、私の答えを更新します。 'List'を含むようにあなたの質問を更新することはできますか? – Filip

関連する問題