使用modelmapper阻止循环引用-list

f8rj6qna  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(478)

我有一个json错误,因为我的dto彼此保持一个循环引用。
公司收件人:

@Data
public class CompanyDTO {

    private Long id;
    private String name;
    private List<CompanyCountryDTO> companyCountries;
    //getters and setters
}

公司所在国:

@Data
public class CompanyCountryDTO {

    private Long id;
    private LocalDateTime createdAt;
    private CompanyDTO company;
    private CountryDTO country;
    //getters and setters

companyservice实现将公司列表转换为公司列表收件人:

@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中删除公司引用?

cygmwpex

cygmwpex1#

我认为您只需要跳过“反向引用”就可以避免循环和无限递归。在这种情况下,字段 companyCompanyCountryDTO .
要让它工作,请配置您的 ModelMapper 比如:

modelMapper.addMappings(new PropertyMap<CompanyCountry, CompanyCountryDTO>() {
    @Override
    protected void configure() {
        // Tells ModelMapper to NOT populate company
        skip(destination.getCompany());
    }
});

相关问题