我正在将 ModelMapper 与 Spring 一起使用。在我的 Controller 类中,我正在 Autowiring ModelMapper bean:
@Autowired
private ModelMapper mapper;
我想在我的 Controller 方法中在我的模型类和 DTO 之间进行显式映射,例如:
modelMapper.addMappings(mapper -> {
mapper.map(src -> src.getBillingAddress().getStreet(),
Destination::setBillingStreet);
mapper.map(src -> src.getBillingAddress().getCity(),
Destination::setBillingCity);
});
然后使用映射器来映射类。
我的问题是,在每个 Controller 方法调用中添加显式映射是否正确?对象 modelMapper 的内存大小会开始增长吗?
另一种解决方案是在创建 ModelMapper bean 时仅添加一次映射,但我认为将映射逻辑放入 bean 配置中不是一个好的决定。
最佳答案
在ModelMapper
的bean配置中设置映射逻辑是完全可以的。
映射是该类的实际任务,因此应该在创建时进行配置。
尽管如此,我更喜欢创建多个专用映射器定义,每个类型或一组相关类型都有一个定义。
这样做可以使配置方面与 Controller 中映射器的实际使用分开 - 无需在一个类中创建一大堆不相关的映射配置代码。 事实上,在每个 Controller 中配置映射器会违反 DRY(不要重复)和 SoC(关注点分离)等原则。
在您的情况下(单例ModelMapper
),您可以为要映射的每种类型或类型组创建@Configuration
注释的类。
在该类中,您将收到 ModelMapper 并添加类型映射。
将您的配置代码添加到其中之一
- 一个
ModelMapper
- 接收构造函数或 - 一个带有
@PostConstruct
注释的方法,用于访问@Autowired
ModelMapper
属性。
我自己还没有使用过 ModelMapper,但在查看了它的代码库之后,我猜测如果您遵循原来的方法,内存使用量不会增加,但您会发现重复映射的异常情况抛出。
关于spring - ModelMapper 与 Spring,在哪里放置显式映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462219/