ModelMapper - 映射已经存在 - 两种配置
ModelMapper - A mapping already exists - Two configurations
我有两个 class 使用 ModelMapper 将实体转换为 DTO。在每个 class 中,我在 class 的构造函数中对 ModelMapper 进行了配置,以避免将所有关系转换为 DTO 并得到 WhosebugError。
CompanyServiceImpl
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());
}
};
CompanyProfileImpl
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 设置两个配置,每个配置都特定于已实现的服务?因为在一种情况下带来一些关系是有意义的,而在另一种情况下则没有。
我将 class 的实例化更改为构造函数,而不是让 Spring 实例化并视为单例。
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);
}
我刚刚通过将所有配置移动到 @AppConfig
中的 @Bean
实例解决了这个问题。留下 MyMapper.class 只有 return 的 myMapper.map()
语句。
我有两个 class 使用 ModelMapper 将实体转换为 DTO。在每个 class 中,我在 class 的构造函数中对 ModelMapper 进行了配置,以避免将所有关系转换为 DTO 并得到 WhosebugError。
CompanyServiceImpl
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());
}
};
CompanyProfileImpl
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 设置两个配置,每个配置都特定于已实现的服务?因为在一种情况下带来一些关系是有意义的,而在另一种情况下则没有。
我将 class 的实例化更改为构造函数,而不是让 Spring 实例化并视为单例。
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);
}
我刚刚通过将所有配置移动到 @AppConfig
中的 @Bean
实例解决了这个问题。留下 MyMapper.class 只有 return 的 myMapper.map()
语句。