0

我有一个 spring 应用程序,它使用模型映射器在实体和 DTO 对象之间进行转换。我在 DTO 中有一个字符串,它表示实体中的 ZonedDateTime 对象。我在 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 对象的那个根本不会被执行。反之亦然的转换正在正确执行。

我将不胜感激任何帮助,对此的任何建议。

谢谢

4

1 回答 1

0

经过大量的在线阅读和实验,我已经解决了这个错误。似乎 addConverter 调用的顺序很重要。在实体到 dto 转换的转换器之后,我添加了 dto 到实体转换的转换器。一旦订单正确,代码就开始工作。发布此内容以便对某人有所帮助,因为 modelmapper 的文档非常不稳定。

于 2017-07-18T13:26:45.993 回答