3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 216
1

Mapstruct

03.03.2023, 17:33. Показов 1008. Ответов 1

Author24 — интернет-сервис помощи студентам
у меня есть простой маппер:
Java
1
2
3
4
5
6
7
8
9
@Mapper(componentModel = "spring")
public abstract class UserMapper {
    public UserDTO toDto(User user) {
        UserDTO userDTO = new UserDTO();
        userDTO.setUsername(user.getUsername());
        userDTO.setChatId(user.getChatId());
        return userDTO;
    }
}
далее я делаю mvn clean install, и получаю экземпляр класса данного маппера в папке target:
Java
1
2
3
4
5
6
7
8
@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2023-03-03T17:18:51+0300",
    comments = "version: 1.5.3.Final, compiler: javac, environment: Java 1.8.0_301 (Oracle Corporation)"
)
@Component
public class UserMapperImpl extends UserMapper {
}
как видно, у сгенерированного класса есть приписка @Component, но почему то, когда я пытаюсь заинжектить это, то начинается невиданная хрень, пишет что не может найти какой то символ и так далее, у меня есть опыт гегления и решения многих ошибок, но решить эту я не могу....


когда я вызываю свой маппер так, то все работает:
Java
1
2
UserDTO dto = Mappers.getMapper(UserMapper.class).toDto(user);
System.out.println(dto);

конкретно имею два вопроса:
1) Почему несмотря на @Component аннотацию, я не могу заинжектить бин?
2) Какправильно вызывать свой маппер в сервисах? Является ли вызов Mappers.getMapper(UserMapper.class).toDto(user); нормальным? Просто выглядит как тяжеловеная операция, а я смотрел что мапперы от мапстракт, из за генерации ов время компиляции должны быть супер быстрыми.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2023, 17:33
Ответы с готовыми решениями:

Маппинг дженериков в MapStruct
Я почитал Reference Guide но не увидел решения, понимаю что для генерации кода нужны конкретные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
136 / 80 / 22
Регистрация: 17.11.2009
Сообщений: 283
30.03.2023, 20:48 2
Для mapstruct

Определяем Mapper:

Java
1
2
3
4
@Mapper(componentModel = "spring")
public interface UserMapper {
    UserDTO toDto(User user);
}
В папке target появится class UserMapperImpl.

Инжектим UserMapper userMapper;

Вызываем:

Java
1
2
UserDTO dto = userMapper.toDto(user);
System.out.println(dto);
1
30.03.2023, 20:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru