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

Маппинг DTO через ModelMapping

23.07.2023, 21:12. Показов 641. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
мне нужно смапить дто:
Java
1
2
3
4
5
6
public class ExchangeRateReqDTO {
    private String baseCurrencyCode;
    private String targetCurrencyCode;
    private BigDecimal rate;
}
}
в entity:
Java
1
2
3
4
5
6
public class ExchangeRate {
    private Integer id;
    private Integer baseCurrencyId;
    private Integer targetCurrencyId;
    private BigDecimal rate;
}
для этого я сделал мапер:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public ExchangeRate toModel (ExchangeRateReqDTO exchangeRateReqDTO) {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.addConverter(new AbstractConverter<String, Integer>() {
            @Override
            protected Integer convert(String source) {
                return getCurrencyIdByCode(source);
            }
        });
        modelMapper.addMappings(new PropertyMap<ExchangeRateReqDTO, ExchangeRate>() {
            @Override
            protected void configure() {
                skip().setId(null);
                source = exchangeRateReqDTO;
                map().setBaseCurrencyId(getCurrencyIdByCode(source.getBaseCurrencyCode()));
                map().setTargetCurrencyId(getCurrencyIdByCode(source.getTargetCurrencyCode()));
            }
        });
        return modelMapper.map(exchangeRateReqDTO, ExchangeRate.class);
    }


1) Почему я должен явно указывать source = exchangeRateReqDTO (БЕЗ ЭТОГО НЕ РАБОТАЕТ), ведь оно явно указано и его брать надо из контекста.
2) Зачем мне указывать конвертор отдельно, если всеравно и там и там работает функция getCurrencyIdByCode?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2023, 21:12
Ответы с готовыми решениями:

Маппинг запроса в DTO
Всем привет! Столкнулся с определенными трудностями. Приложение написано на spring boot + spring...

java Kafka не могу правильно отправить dto через postman
Здравствуйте, Я сейчас изучаю kafka по данной статье Apache Kafka для чайников на habr....

Маппинг сайта через FTP в VB
Mojno li sdelat' na VB mapping na FTP sayt ,i esli da to kak?

Нужен ли DTO?
Доброго времени суток! Возник вопрос по поводу необходимости DTO. Собственно имеется форма...

Dto-Entity mapper
Привет. Есть дто, есть энтити, надо одно копировать в другое, ну и обратно. Писать кучу...

4
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
24.07.2023, 10:00 2
При совпадении полей, моделмаппер всё должен сам смапить без доп. настроек
Однако я бы обходил моделмапер за километр. В будущем он доставит очень много проблем своими маппингами, которые невозможно продебажить.
Лучше использовать MapStruct
1
Эксперт функциональных языков программированияЭксперт Java
4483 / 2718 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
26.07.2023, 06:39 3
Цитата Сообщение от UnrealCoder Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public ExchangeRate toModel (ExchangeRateReqDTO exchangeRateReqDTO) {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.addConverter(new AbstractConverter<String, Integer>() {
            @Override
            protected Integer convert(String source) {
                return getCurrencyIdByCode(source);
            }
        });
        modelMapper.addMappings(new PropertyMap<ExchangeRateReqDTO, ExchangeRate>() {
            @Override
            protected void configure() {
                skip().setId(null);
                source = exchangeRateReqDTO;
                map().setBaseCurrencyId(getCurrencyIdByCode(source.getBaseCurrencyCode()));
                map().setTargetCurrencyId(getCurrencyIdByCode(source.getTargetCurrencyCode()));
            }
        });
        return modelMapper.map(exchangeRateReqDTO, ExchangeRate.class);
    }
Смотри, супер лайфхак:
Java
1
2
3
4
5
6
7
    public static ExchangeRate toModel(ExchangeRateReqDTO dto) {
        ExchangeRate model = new ExchangeRate();
        model.setBaseCurrencyId(getCurrencyIdByCode(dto.getBaseCurrencyCode()));
        model.setTargetCurrencyId(getCurrencyIdByCode(dto.getTargetCurrencyCode()));
        model.setRate(dto.getRate());
        return model;
    }
В три раза короче и никаких непоняток.
3
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 216
28.07.2023, 22:01  [ТС] 4
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
При совпадении полей, моделмаппер всё должен сам смапить без доп. настроек
Однако я бы обходил моделмапер за километр. В будущем он доставит очень много проблем своими маппингами, которые невозможно продебажить.
Лучше использовать MapStruct
а можно про принципиальные отличия их двух?
я пока что выбираю для себя лучший, маппер показался проще хз
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2023, 10:33 5
Цитата Сообщение от UnrealCoder Посмотреть сообщение
а можно про принципиальные отличия их двух?
мапстракт генерит код, который потом можно посмотреть, подебажить и.т.д
моделмаппер насколько я понимаю делает инструментацию байт-кода поэтому смотреть и дебажить его нереально
Есть ещё разница в использовании и быстродействии, но это не так принципиально.
Больше инфы в Сети можно найти
0
30.07.2023, 10:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2023, 10:33
Помогаю со студенческими работами здесь

XML и DTO классы
Вопрос возник на основе статьи Пример создания приложения &quot;Работа с комнатами в студенческих...

SQL DAO DTO
Добрый день. у меня есть задание : Задание 1: сделать простейшее обращение к бд. Задание 2:...

Random List<DTO>
Добрый день. Подскажите как получить редомом значения первых 5 элементов. делаю так: ...

Как правильно сделать DTO
Здравствуйте. У меня такая проблема в моем проекте есть сущность @Entity @Table(name = &quot;client&quot;)...

Создание своего генератора DTO
Добрый вечер, подскажите чем-нибудь(материалом, идеей) пожалуйста, хочу создать свой генератор DTO,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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