エラーのための3つの可能性があります。
は、最初に:あなたに依存している他のマッパーがありますUserMapper
また、表示していないメソッドがあります。このような場合、MapStructは他のメソッドのマッピングに定義されたメソッドの1つを使用しようとします。
私はデフォルトとして1つの方法を持ち、他の方法は手動または明示的に使用する必要があると思います。そのためには、MapStruct @Named
/@Qualifier
とMapping#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番目の解決方法と同じです。
どの方法でエラーが発生しますか?どのバージョンのMapStructを使用していますか? – Filip