Конфигурация маппера
@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, то реализованный для этого конвертер сработает как положенно.
Почему маппер не использует другие конверторы для вложенных объктов?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости