Как пропустить свойства в источнике назначения в modelmapper? - PullRequest
0 голосов
/ 27 октября 2019

У меня есть два класса. RequestDTO и Entity. Я хочу сопоставить RequestDTO с сущностью. В этом случае я хочу вставить одно из свойств Entity вручную, что означает, что это свойство отсутствует в запросе DTO. Как этого добиться с помощью modelmapper.

public class RequestDTO {

    private String priceType;

    private String batchType;
}

public class Entity {


    private long id;

    private String priceType;

    private String batchType;
}

Entity newEntity = modelMapper.map(requestDto, Entity.class);

Но это не работает, оно говорит, что не может преобразовать строку в long. Я прошу решение этого или лучший подход к этому.

1 Ответ

0 голосов
/ 27 октября 2019

Если вы хотите выполнить сопоставление вручную (в идеале для разнородных объектов)

Вы можете проверить документацию для сопоставления разнородных объектов Сопоставление свойств ,

Вы можете определить сопоставление свойств, используя ссылки на методы для сопоставления источника и получателя.

typeMap.addMapping(Source::getFirstName, Destination::setName);

Типы источника и назначения не должны совпадать.

 typeMap.addMapping(Source::getAge, Destination::setAgeString);

Если вы не хотите отображать поле за полем, чтобы избежать шаблонного кода

, вы можете настроить пропускающий маппер, чтобыИзбегайте сопоставления определенных полей с вашей моделью назначения:

modelMapper.addMappings(mapper -> mapper.skip(Entity::setId));

Я создал тест для вашего случая, и сопоставление работает для обеих сторон без какой-либо настройки :

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Before;
import org.junit.Test;
import org.modelmapper.ModelMapper;

import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotNull;

public class ModelMapperTest {

    private ModelMapper modelMapper;

    @Before
    public void beforeTest() {
        this.modelMapper = new ModelMapper();
    }

    @Test
    public void fromSourceToDestination() {
        Source source = new Source(1L, "Hello");
        Destination destination = modelMapper.map(source, Destination.class);
        assertNotNull(destination);
        assertEquals("Hello", destination.getName());
    }

    @Test
    public void fromDestinationToSource() {
        Destination destination = new Destination("olleH");
        Source source = modelMapper.map(destination, Source.class);
        assertNotNull(source);
        assertEquals("olleH", destination.getName());
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Source {
    private Long id;
    private String name;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Destination {
    private String name;
}
...