ModelMapper - 转换器/ AbstractConverter VS提供商

问题描述 投票:3回答:1

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

尽管我试图理解的文档,我发现很难理解时使用转换器或商或AbstractConverter。

现在,例如,如果我想字符串属性转换为目标DTO的内部小DTO的,我做手工的抽象转换器内部。

例如:

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

是虽然是正确的方式做到这一点?什么时候应该使用供应商?

如果我想设置用条件的属性,我可以使用条件从转换器中,或使用属性映射时,只有?

此外,它是一个很好的做法,使用相同的modelMapper实例转换多个不同类型的对象?

提前致谢

java converter modelmapper
1个回答
0
投票

与此有关的工作正确的方法是使用转换器。

例如,假设我想创建一个转换器,将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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.