处理这个问题的正确方法是使用转换器。
例如,假设我想创建一个转换器来将 dto 转换为域对象。
所以首先你定义一个转换器:
private Converter companyDtoToCompany = new AbstractConverter<CompanyDto, Company>() {
@Override
protected Company convert(CompanyDto source) {
Company dest = new Company();
dest.setName(source.getName());
dest.setAddress(source.getAddress());
dest.setContactName(source.getContactName());
dest.setContactEmail(source.getContactEmail());
(...)
dest.setStatus(source.getStatus());
return dest;
}
};
然后在 configureMappings() 方法中将它添加到映射器中:
modelMapper = new ModelMapper();
// Using STRICT mode to prevent strange entities mappin
modelMapper.getConfiguration()
.setMatchingStrategy(MatchingStrategies.STRICT);
modelMapper.addConverter(companyDtoToCompany);
// modelMapper.addConverter(otherConverter);
}
最后,您只需为可以从代码中使用的类型添加映射方法:
public Company convertCompanyReqDtoToCompany(CompanyDto dto, Class<Company> destinationType) {
return modelMapper.map(dto, destinationType);
}