В весенней загрузке я использую модель 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, но это слишком сложная кодировка в коде, чтобы проверять каждый класс назначения
Есть ли лучшее решение?