Modelmapper не выполняет метод преобразования конвертера

У меня есть приложение Spring, которое использует modelmapper для преобразования между сущностью и объектами DTO. У меня есть строка в DTO, которая представляет объект ZonedDateTime в Entity. Я написал следующий фрагмент в SpringAppConfiguration

    @Bean
public ModelMapper contactModelMapper() {

    Converter<String, ZonedDateTime> toZonedDateTimeString = new AbstractConverter<String, ZonedDateTime>() {
        @Override
        public ZonedDateTime convert(String source) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            LocalDateTime datel = LocalDateTime.parse(source, formatter);
            ZonedDateTime result = datel.atZone(ZoneId.systemDefault());
            return result;
        }
    };
    Converter<ZonedDateTime, String> toStringZonedDateTime = new AbstractConverter<ZonedDateTime, String>() {
        @Override
        public String convert(ZonedDateTime source) {
            String result = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(source);
            return result;
        }
    };

    PropertyMap<Contact, ContactDTO> contactDTOmap = new PropertyMap<Contact, ContactDTO>() {
        @Override
        protected void configure() {
            map().setTenantId(source.getTenant().getTenantId());
            //if (source.getCreatedDateTime() != null) map().setCreatedDateTime(source.getCreatedDateTime());
            //when(Conditions.isNotNull()).map(source.getCreatedDateTime(), map().getCreatedDateTime());
        }
    };

    /* this is for userDTO to BO.. */
    PropertyMap<ContactDTO, Contact> contactMap = new PropertyMap<ContactDTO, Contact>() {
        @Override
        protected void configure() {
            map().getTenant().setTenantId(source.getTenantId());
        }
    };
    ModelMapper contactModelMapper = new ModelMapper();
    contactModelMapper.addMappings(contactDTOmap);
    contactModelMapper.addMappings(contactMap);
    contactModelMapper.addConverter(toStringZonedDateTime);
    contactModelMapper.addConverter(toZonedDateTimeString);
    return contactModelMapper;
}

Как видите, есть 2 конвертера. Тот, который изменяется со строки DTO на объект ZonedDateTime в entity, вообще не выполняется. Один для обратного преобразования выполняется правильно.

Буду признателен за любую помощь, любые предложения по этому поводу.

Спасибо


person kavita    schedule 18.07.2017    source источник
comment
Какие-либо предложения? Любая информация, которую я должен предоставить ??   -  person kavita    schedule 18.07.2017


Ответы (1)


Я устранил ошибку после того, как много читал в Интернете и экспериментировал. Кажется, порядок вызовов addConverter имеет значение. Я добавил конвертер для преобразования dto в сущность после преобразователя для преобразования сущности в dto. Как только заказ был оформлен, код заработал. Публикуем это так, чтобы это помогло кому-то, поскольку документация для modelmapper очень изменчива ..

person kavita    schedule 18.07.2017