Spring Modelmapper不执行转换器转换方法

Spring Modelmapper不执行转换器转换方法,spring,modelmapper,Spring,Modelmapper,我有一个spring应用程序,它使用modelmapper在实体和DTO对象之间进行转换。DTO中有一个字符串,表示实体中的ZonedDateTime对象。我在SpringAppConfiguration中编写了以下代码段 @Bean public ModelMapper contactModelMapper() { Converter<String, ZonedDateTime> toZonedDateTimeString = new AbstractConver

我有一个spring应用程序,它使用modelmapper在实体和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;
}
@Bean
公共模型映射器contactModelMapper(){
Converter to ZonedDateTimeString=新的AbstractConverter(){
@凌驾
公共分区DateTime转换(字符串源){
DateTimeFormatter formatter=模式的DateTimeFormatter.of(“yyyy-MM-dd HH:MM:ss”);
LocalDateTime datel=LocalDateTime.parse(源,格式化程序);
ZonedDateTime结果=datel.atZone(ZoneId.systemDefault());
返回结果;
}
};
Converter-toStringZonedDateTime=新的抽象转换器(){
@凌驾
公共字符串转换(ZonedDateTime源){
字符串结果=模式的DateTimeFormatter.of(“yyyy-MM-dd HH:MM:ss”).format(源);
返回结果;
}
};
PropertyMap contactDTOmap=新的PropertyMap(){
@凌驾
受保护的void configure(){
map().setTenantId(source.getTenant().getTenantId());
//if(source.getCreatedDateTime()!=null)map().setCreatedDateTime(source.getCreatedDateTime());
//when(Conditions.isNotNull()).map(source.getCreatedDateTime(),map().getCreatedDateTime());
}
};
/*这是给用户发送给BO的*/
PropertyMap contactMap=新的PropertyMap(){
@凌驾
受保护的void configure(){
map().getTenant().setTenantId(source.getTenantId());
}
};
ModelMapper contactModelMapper=新的ModelMapper();
contactModelMapper.addMappings(contactDTOmap);
contactModelMapper.addMappings(contactMap);
contactModelMapper.addConverter(toStringZonedDateTime);
contactModelMapper.addConverter(toZonedDateTimeString);
返回contactModelMapper;
}
如您所见,有2个转换器。从DTO字符串更改为实体中ZonedDateTime对象的对象根本不会执行。反之亦然,转换正在正确执行

我将非常感谢任何帮助和建议


谢谢

经过大量的在线阅读和实验,我已经解决了这个错误。addConverter的顺序似乎很重要。我在实体到dto转换的转换器之后添加了dto到实体转换的转换器。订单一纠正,代码就开始工作了。发布此信息以便帮助他人,因为modelmapper的文档非常复杂。

有什么建议吗?我应该提供的任何信息??