org.ModelMapper Сценарий наследования, атрибуты дочернего класса не инициализированы - PullRequest
0 голосов
/ 05 февраля 2020

В весенней загрузке я использую модель mapper для преобразования DTO в Entity. Но после преобразования заполняются только переменные родительского класса. Все переменные в дочернем классе имеют значение null

, вот мой метод весенней настройки

    @Bean
    public ModelMapper modelMapper() {
        ModelMapper modelMapper = new ModelMapper();

        modelMapper.createTypeMap(BaseClassVo.class, BaseClass.class)
                   .include(Child_1Vo.class, BaseClass.class)
                   .include(Child_2Vo.class, BaseClass.class)
                   .include(Child_3Vo.class, BaseClass.class);


        modelMapper.typeMap(Child_1Vo.class, BaseClass.class)
                   .setProvider(new Provider<BaseClass>() {
                       public BaseClass get(ProvisionRequest<BaseClass> request) {
                           return new Child_1();
                       }
                   });
        modelMapper.typeMap(Child_2Vo.class, BaseClass.class)
                   .setProvider(new Provider<BaseClass>() {
                       public BaseClass get(ProvisionRequest<BaseClass> request) {
                           return new Child_2();
                       }
                   });
        modelMapper.typeMap(Child_3Vo.class, BaseClass.class)
                   .setProvider(new Provider<BaseClass>() {
                       public BaseClass get(ProvisionRequest<BaseClass> request) {
                           return new Child_3();
                       }
                   });
        return modelMapper;
    }

Мой объект vo может иметь любой тип Child_1Vo, Child_2Vo , Child_3Vo. Я хочу соответствующий класс Child_1, Child_2, Child_3 после сопоставления. Что я получаю после конвертации, но инициализируются только поля базового класса. Все дочерние классы имеют нулевое значение.

Код в моем классе обслуживания очень мал, как показано ниже

  private BaseClass getEntityFromDto(BaseClassVo vo) {
        return modelMapper.map(vo, BaseClass.class);
    } 

Плохое решение Я могу проверить VO class Введите мой метод класса обслуживания, а затем укажите соответствующий класс назначения,

, как

vo.getClass().getSimpleName().equals("Child_1Vo") 
///or something like 
vo instanceOf Child_1Vo

И затем установите класс назначения как Child_1, но это слишком сложная кодировка в коде, чтобы проверять каждый класс назначения

Есть ли лучшее решение?

...