java - 使用 ModelMapper 防止循环引用 - 列表
问题描述
我有一个 Json 错误,因为我的 DTO 彼此保持循环引用。
公司DTO:
@Data
public class CompanyDTO {
private Long id;
private String name;
private List<CompanyCountryDTO> companyCountries;
//getters and setters
}
公司国家DTO:
@Data
public class CompanyCountryDTO {
private Long id;
private LocalDateTime createdAt;
private CompanyDTO company;
private CountryDTO country;
//getters and setters
CompanyService实现将Company列表转换为CompanyDTO列表:
@Override
public List<CompanyDTO> getAllCompaniesWithCountryDTO() {
List<Company> listCompanies = companyRep.findAll();
return listCompanies.stream().map(this::convertToDto).collect(Collectors.toList());
}
private CompanyDTO convertToDto(Company company) {
CompanyDTO companyWithServiceDTO = modelMapper.map(company, CompanyDTO.class);
return companyWithServiceDTO;
}
我想做这样的事情,但使用 ModelMapper 因为我还有其他循环引用:
listCompanies.stream().forEach(company -> {
if (!ObjectUtils.isEmpty(company.getCompanyCountries())) {
company.getCompanyCountries().forEach(companyCountry -> {
companyCountry.setCompany(null);
});
}
});
由于公司还有另一个 CompanyCountryDTO 列表,如何从 CompanyCountryDTO 中删除公司参考?
解决方案
我认为您只需要跳过“反向引用”即可避免循环和无限递归。在这种情况下, 中的company
字段CompanyCountryDTO
。
让它工作配置你ModelMapper
喜欢:
modelMapper.addMappings(new PropertyMap<CompanyCountry, CompanyCountryDTO>() {
@Override
protected void configure() {
// Tells ModelMapper to NOT populate company
skip(destination.getCompany());
}
});
推荐阅读
- c++ - 为什么在声明之前是虚拟的,之后是覆盖?
- ios - 将 Swift Scenekit 中的多个 SCNObject 与圆柱体/路径连接起来
- python - 使用列表推导从列表中随机删除一个元素
- python - LookupError: 'hex' 不是文本编码;使用 codecs.encode() 处理任意编解码器
- node.js - 页面刷新时不会触发 React 客户端上的 Socket.io 断开连接
- python-3.x - Python 无法通过标题 selenium 捕获元素
- firebase - 使用 Golang exec 命令运行时 Firebase 模拟器不会停止
- r - 粘贴 if 条件 R
- r - 如何计算椭圆体外壳和R中的点之间的最小距离
- html - 如何从 html 电子邮件打开默认日历应用程序?