gpt4 book ai didi

java - ModelMapper - 转换器/抽象转换器与提供者

转载 作者:搜寻专家 更新时间:2023-11-01 03:46:43 24 4
gpt4 key购买 nike

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

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

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

例如:

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

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

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

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

提前致谢

最佳答案

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

例如,假设我想创建一个转换器来将 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);
}

关于java - ModelMapper - 转换器/抽象转换器与提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48628550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com