Конфигурация маппера
@Component
public class ModelMapperFactoryBean implements FactoryBean<ModelMapper> {
@Autowired
private Collection<MapperConfigurer> configurers;
@Override
public ModelMapper getObject() {
final ModelMapper modelMapper = new ModelMapper();
if (!CollectionUtils.isEmpty(configurers)) {
configurers.forEach(c -> c.configure(modelMapper));
}
return modelMapper;
}
}
Пример конвертера
@Component
public class ModelConverter implements MapperConfigurer {
@Override
public void configure(ModelMapper modelMapper) {
modelMapper.addConverter(new AbstractConverter<ModelEntity, Model>() {
@Override
protected Model convert(ModelEntity source) {
return Model.builder()
.id(source.getId())
.name(source.getName())
.serverConfig(modelMapper.map(source.getServerConfig(), ServerProcessConfig.class))
.build();
}
});
}
}
Spring приложение, в котором ипользую маппер. Для каждых сущностей есть свой конвертер. Есть для Model. есть и для ServerProcessConfig.
При конвертации model я вызывают modelmapper и вызываю у него метод map чтобы сконвертировать вложенный объект, для которого тоже есть реализованный конвертер.
Соответственно, я ожидаю, что маппер будет использоваться его. Однако, очевидно маппер его не использвует(брекпоинт не срабатывает) а пробует преобразовать объект так, судя по всему, просто по сопостовлению полей.
Если попробовать просто (не в качестве вложенного объекта) преобразовать ServerProcessConfig, то реализованный для этого конвертер сработает как положенно.
Почему маппер не использует другие конверторы для вложенных объктов?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости