我有一个要映射的 UserDTO 和 User 实体。创建新用户时,某些字段(例如:password,modifiedBy)必须通过某种自定义方法生成(例如:password随机生成和编码,但modifiedBy用户名是从安全服务中检索的)。为此,我将一些服务自动连接到映射器中。他们中的许多人返回,String而 MapStruct 无法理解在每种情况下使用哪个,而只使用它在接受String作为输入的所有内容上找到的第一个。
@Mapper(componentModel = "spring", uses = PasswordEncoder.class)
public interface UserMapper {
@Mapping(target = "password", qualifiedByName = "PASS")
User mapUser(UserDto dto);
@Named("PASS")
default String getPass(PasswordEncoder passwordEncoder){
return passwordEncoder.encode(some_random_generator);
}
}
Run Code Online (Sandbox Code Playgroud)
这将生成仅使用PasswordEncoder任何接受的 setter 中的方法的代码,String并且getPass(...)根本不使用方法。但是我只需要它getPass(...)在password现场使用我的方法。