java - 将映射添加到模型映射器的问题
问题描述
我遇到了将具有自定义 PropertyMap 定义的类添加到模型映射器的问题。只要我在我正在使用的类的@PostConstruct 中添加了映射,一切都在工作。另一方面,当我将它移动到我想要添加所有 PropertyMaps 的新类时,似乎没有添加到模型映射器中。
使用此配置,一切正常。RestCompanyDto 具有对象 RestAddressDto ,当我使用模型映射器中的映射函数时,内部对象被正确转换。
@Service
@RequiredArgsConstructor
public class RestOrganizationService {
private final ModelMapper modelMapper;
private final RestAddressDtoMap addressDtoMap;
@PostConstruct
public void mapperConfig() {
modelMapper.addMappings(addressDtoMap);
}
private OfficeDto map(Long id, RestOfficeDto restOfficeDto){
OfficeDto officeDto = modelMapper.map(restOfficeDto, OfficeDto.class);
officeDto.setId(id);
return officeDto;
}
另一方面,当我从 RestOrganizationService 中删除 @PostConstructor 并将其移动到新类时,地址对象的映射不起作用。
@配置
@AllArgsConstructor
public class EPRestMapperConfig {
private final ModelMapper modelMapper;
private final RestAddressDtoMap restAddressDtoMap;
@PostConstruct
public void init() {
modelMapper.addMappings(restAddressDtoMap);
}
}
这是 PropertyMap 的附加代码
@Service
public class RestAddressDtoMap extends PropertyMap<RestAddressDto, AddressDto> {
private CityRepository cityRepository;
private CityServiceImpl cityService;
public RestAddressDtoMap(CityRepository cityRepository, CityServiceImpl cityService){
super(RestAddressDto.class, AddressDto.class);
this.cityRepository = cityRepository;
this.cityService = cityService;
}
@Override
protected void configure() {
using(getCityDto).map(source.getCityId()).setCity(null);
}
private final Converter<Long, CityDto> getCityDto = context ->
(context.getSource() != null
? cityService.toDto(cityRepository.findOne(context.getSource()))
: null);
}
解决方案
在您的情况下,我建议使用以下方法:
@Configuration
public class EPRestMapperConfig {
@Bean
public ModelMapper modelMapper(RestAddressDtoMap restAddressDtoMap) {
return new ModelMapper().addMappings(restAddressDtoMap);
}
@Bean
public RestAddressDtoMap restAddressDtoMap() {
return new RestAddressDtoMap();
}
}
我喜欢这种 bean 创建风格,因为您可以在 bean 创建过程中看到 bean 之间所需的依赖关系并设置所需的组件。
推荐阅读
- amazon-web-services - 对 S3 存储桶中新对象的 PUTS 写后读一致性的警告
- javascript - 当输入、选择等形式发生变化时如何获取计数器?
- node.js - 如何在线正确上传 localhost 网站?
- powershell - 如何比较文件中的两个连续字符串
- cordova - Ionic 4 不能在没有 cordova 的情况下使用 HTTP 插件了吗?
- sql - SQL doesn't display rows where
- python - 如何向 request.data 添加新数据?
- c++ - CBC模式可以用于为客户保存程序中的密码吗?
- oracle - Oracle Spatial 几何转换给出错误的输出
- css - 如何使用css将div的内容设置为在父div中可见