У меня есть два класса, которые используют ModelMapper для преобразования объекта в DTO. В каждом классе у меня есть конфигурация в конструкторе класса для ModelMapper, чтобы избежать преобразования всех отношений в DTO и получения StackOverflowError.
КомпанияСервисИмпл
private ModelMapper modelMapper;
@Autowired
public CompanyServiceImpl(ModelMapper modelMapper) {
this.modelMapper = modelMapper;
modelMapper.addMappings(skipCompanyServiceFieldsMap);
modelMapper.addMappings(skipCompanyServiceModuleFieldsMap);
}
PropertyMap<CompanyServiceModule, CompanyServiceModuleDTO> skipCompanyServiceModuleFieldsMap = new PropertyMap<CompanyServiceModule, CompanyServiceModuleDTO>() {
@Override
protected void configure() {
// Tells ModelMapper to NOT populate back references
skip(destination.getCompanyService());
skip(destination.getServiceModule().getCompanyServiceModules());
skip(destination.getServiceModule().getService());
skip(destination.getServiceModule().getServiceModuleLanguages());
skip(destination.getServiceModule().getServiceModuleMenus());
}
};
КомпанияПрофильImpl
private ModelMapper modelMapper;
@Autowired
public CompanyProfileImpl(ModelMapper modelMapper) {
this.modelMapper = modelMapper;
modelMapper.addMappings(skipCompanyProfileFieldsMap);
modelMapper.addMappings(skipCompanyProfileModuleFieldsMap);
modelMapper.addMappings(skipCompanyProfileServiceModuleFieldsMap);
}
PropertyMap<CompanyServiceModule, CompanyServiceModuleDTO> skipCompanyProfileServiceModuleFieldsMap = new PropertyMap<CompanyServiceModule, CompanyServiceModuleDTO>() {
@Override
protected void configure() {
// Tells ModelMapper to NOT populate back references
skip(destination.getCompanyProfileModules());
skip(destination.getServiceModule());
skip(destination.getCompanyService());
}
};
Когда я запускаю приложение, я получаю сообщение об ошибке:
Сопоставление для com.closeupinternational.authorization.dtos.CompanyServiceModuleDTO.setCompanyService() уже существует.
Как я могу иметь две конфигурации для ModelMapper, каждая из которых специфична для реализованного сервиса? Так как в одном случае есть смысл приводить одни отношения, а в другом нет.
Я изменился, но я хотел бы знать, есть ли у кого-то лучшее решение. @пирхо




Я изменил создание экземпляра класса на конструктор и не оставил Spring для создания экземпляра и обработки его как Singleton.
private ModelMapper modelMapper;
public CompanyProfileImpl() {
// Necessary to not get in conflict with others
this.modelMapper = new ModelMapper();
modelMapper.addMappings(skipCompanyProfileFieldsMap);
modelMapper.addMappings(skipCompanyProfileModuleFieldsMap);
modelMapper.addMappings(skipCompanyServiceModuleFieldsMap);
}
Я только что решил эту проблему, переместив всю конфигурацию в экземпляр @Bean в @AppConfig. Выход из MyMapper.class только с возвратом оператора myMapper.map().
Как и где инициализируется ModelMapper?