Код: Выделить всё
@Mapper(uses = EmailMapper.class,
componentModel = "spring",
injectionStrategy = InjectionStrategy.CONSTRUCTOR)
public abstract class UserMapper {
private final EmailMapper emailMapper; // another mapper
protected UserMapper(EmailMapper emailMapper) {
this.emailMapper = emailMapper;
}
public User toUser(UpdateUserRequestDto dto) {
User user = new User();
user.setId(dto.getId());
// referencing another mapper
user.setEmailData(emailMapper.toEmailDatas(dto.getEmailData(), user));
return user;
}
}
< /code>
@Mapper(componentModel = "spring",
injectionStrategy = InjectionStrategy.CONSTRUCTOR)
public interface EmailMapper {
@Mapping(source = "email", target = "email")
@Mapping(source = "user", target = "user")
EmailData toEmailData(String email, User user);
default List toEmailDatas(List emails, User user) {
List emailData = emails.stream()
.map(e -> toEmailData(e, user))
.toList();
return emailData;
}
}
< /code>
Вот что сгенерировано mapstruct: < /p>
@Component
public class UserMapperImpl extends UserMapper {
private final EmailMapper emailMapper;
@Autowired
public UserMapperImpl(EmailMapper emailMapper) {
this.emailMapper = emailMapper;
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... uct-mapper