Как я могу решить несовместимые типы (не конвертируемые) при использовании moddelmapper с картой типов - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь сопоставить свою сущность с моим DTO. Насколько я знаю, я пробую разные подходы. Я успешно использовал карту с неявным отображением, а также явную карту при использовании PropertyMap с методом configure.

Теперь я пытаюсь отобразить явное с помощью TypeMap. Это последний, который я не могу заставить работать.

Вместе с началом работы с Modelmapper я использовал в качестве примера ответ в этой теме: Как использовать Explicit Map с Java 8 и ModelMapper?

static ResponseB convertBEntityToDtoExplicitTypeMap(ModelB modelB){
    ModelMapper modelMapper = new ModelMapper();
    TypeMap<ModelB, ResponseB> typeMap = modelMapper.createTypeMap(ModelB.class, ResponseB.class);

    typeMap.addMappings(mapping -> {
        mapping.map(modelB.getId(), ResponseB::setId);
        mapping.map(modelB.getBankaccountName(), ResponseB::setB);
        mapping.map(modelB.isActive(), ResponseB::setActive);
    });

    return modelMapper.map(modelB, ResponseB.class);
}

Приведенный выше блок - мой пример кода, который не работает.

  • С setId у меня ошибка: несовместимые типы: V не конвертируется в Long.
  • У setB есть ошибка: Несовместимые типы: V не преобразуется в String.
  • Ошибка setActive: несовместимые типы: V не может быть преобразовано в логическое значение.

Как я могу заставить этот пример работать с TypeMap?

1 Ответ

0 голосов
/ 25 мая 2019

И продолжая пытаться, я понял это сам.

Мне пришлось использовать класс вместо объекта в mapping.map

static ResponseB convertBEntityToDtoExplicitTypeMap(ModelB modelB){
    ModelMapper modelMapper = new ModelMapper();
    TypeMap<ModelB, ResponseB> typeMap = modelMapper.createTypeMap(ModelB.class, ResponseB.class);

    typeMap.addMappings(mapping -> {
        mapping.map(ModelB::getId, ResponseB::setId);
        mapping.map(ModelB::getBankaccountName, ResponseB::setB);
        mapping.map(ModelB::isActive, ResponseB::setActive);
    });

    return modelMapper.map(modelB, ResponseB.class);
}
...