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

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

23.07.2023, 21:12. Показов 845. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.07.2023, 21:12
Ответы с готовыми решениями:

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

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

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

4
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
24.07.2023, 10:00 2
При совпадении полей, моделмаппер всё должен сам смапить без доп. настроек
Однако я бы обходил моделмапер за километр. В будущем он доставит очень много проблем своими маппингами, которые невозможно продебажить.
Лучше использовать MapStruct
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4550 / 2748 / 486
Регистрация: 28.04.2012
Сообщений: 8,670
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
Сообщений: 217
28.07.2023, 22:01  [ТС] 4
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
При совпадении полей, моделмаппер всё должен сам смапить без доп. настроек
Однако я бы обходил моделмапер за километр. В будущем он доставит очень много проблем своими маппингами, которые невозможно продебажить.
Лучше использовать MapStruct
а можно про принципиальные отличия их двух?
я пока что выбираю для себя лучший, маппер показался проще хз
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.07.2023, 10:33 5
Цитата Сообщение от UnrealCoder Посмотреть сообщение
а можно про принципиальные отличия их двух?
мапстракт генерит код, который потом можно посмотреть, подебажить и.т.д
моделмаппер насколько я понимаю делает инструментацию байт-кода поэтому смотреть и дебажить его нереально
Есть ещё разница в использовании и быстродействии, но это не так принципиально.
Больше инфы в Сети можно найти
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.07.2023, 10:33
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
Apache Airflow для оркестрации и автоматизации рабочих процессов
Mr. Docker 16.03.2025
Управление сложными рабочими процессами — одна из главных головных болей инженеров данных и DevOps-специалистов. Представьте себе: каждый день нужно запускать десятки скриптов в определенной. . .
Оптимизация приложений Java для ARM
Javaican 16.03.2025
ARM-архитектура переживает настоящий бум популярности в технологическом мире. Когда-то воспринимаемая исключительно как решение для мобильных устройств и встраиваемых систем, сегодня она штурмует. . .
Управление состоянием в Vue 3 с Pinia и Composition API
Reangularity 16.03.2025
Когда я начал работать с Vue несколько лет назад, мне казалось достаточным использовать простую передачу данных через props и события между компонентами. Однако уже на среднем по сложности проекте. . .
Введение в DevSecOps: основные принципы и инструменты
Mr. Docker 16.03.2025
DevSecOps - это подход к разработке программного обеспечения, который объединяет в себе принципы разработки (Dev), безопасности (Sec) и эксплуатации (Ops). Суть подхода заключается в том, чтобы. . .
GitHub Actions vs Jenkins: Сравнение инструментов CI/CD
Mr. Docker 16.03.2025
В этой битве за эффективность и скорость выпуска программных продуктов ключевую роль играют специализированные инструменты. Два гиганта в этой области — GitHub Actions и Jenkins — предлагают разные. . .
Реактивное программировани­е с Kafka Stream и Spring WebFlux
Javaican 16.03.2025
Реактивное программирование – это программная парадигма, ориентированная на потоки данных и распространение изменений. Она позволяет выражать статические или динамические потоки данных и. . .
Простая нейросеть на КуМир: Учебное пособие по созданию и обучению нейронных сетей
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru