Мне нужно сделать слияние объектов в приложении Java Spring Boot (ProductDTO и Product).

ProductDTO не содержит все поля из Product, и я хотел бы отобразить только те поля, которые одинаковы в обоих объектах, сохраняя при этом другие значения в целевом объекте.

Я из мира C #, поэтому я не знаю, как лучше всего добиться такого же поведения в Java. В C # я бы сделал это так:

    var project = new Project
    {
        Name = "Project 1",
        Description = "Description"
    };

    var projectDto = new ProjectDTO
    {
        Name = "Project 1 (changed)"
    };

    Mapper.Map(projectDto, project);

После выполнения метода Map объект проекта все еще содержит исходное значение для поля Description.

Каков наилучший способ сделать это в Java Spring?

2
Semir Deljić 11 Апр 2019 в 17:28

2 ответа

Лучший ответ

В библиотеке bean-компонентов Spring есть класс BeanUtils.

BeanUtils.copyProperties(source, target);

Пока ваши классы содержат одинаковые имена свойств, соответствующий метод будет вызываться в цели. Он будет игнорировать любые свойства, которых нет в цели.

2
Luke Langford 11 Апр 2019 в 15:25

Для вашего случая вы можете сделать это, используя утилиты Apache или Spring bean.

org.apache.commons.beanutils.BeanUtils.copyProperties(Object destination, Object source)
org.springframework.beans.BeanUtils.copyProperties(Object source, Object dest)

Положение параметров в обоих случаях разное.

1
Himanshu 11 Апр 2019 в 16:03