6

我正在使用 ModelMapper 将一些对象转换为复杂的 DTO,反之亦然。

尽管我试图理解文档,但我发现很难理解何时使用 Converter、Provider 或 AbstractConverter。

现在,例如,如果我想将字符串属性转换为目标 DTO 内的小 DTO,我将在抽象转换器内手动完成。

例如:

dest.setAddressDTO(new AddressDTO(source.getStreet(), source.getNumber()));

这是正确的方法吗?我什么时候应该使用提供者?

如果我想使用条件设置属性,我可以在转换器中使用 Conditional 还是仅在使用 PropertyMap 时使用?

此外,使用同一个 modelMapper 实例来转换几种不同类型的对象是一种好习惯吗?

提前致谢

4

1 回答 1

2

处理这个问题的正确方法是使用转换器。

例如,假设我想创建一个转换器来将 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);
    }
于 2019-02-03T11:33:17.103 回答