带有 Spring 的 ModelMapper,在哪里放置显式映射?
ModelMapper with Spring, where to put explicit mappings?
我将 ModelMapper 与 Spring 一起使用。在我的控制器中 class 我正在自动装配 ModelMapper bean:
@Autowired
private ModelMapper mapper;
我想在我的模型 class 和我的控制器方法中的 DTO 之间进行显式映射,例如:
modelMapper.addMappings(mapper -> {
mapper.map(src -> src.getBillingAddress().getStreet(),
Destination::setBillingStreet);
mapper.map(src -> src.getBillingAddress().getCity(),
Destination::setBillingCity);
});
然后使用映射器映射classes。
我的问题是,在每个控制器方法调用中添加显式映射是否正确?对象 modelMapper 的内存大小会开始增长吗?
其他解决方案是在创建 ModelMapper bean 时仅添加一次映射,但我认为将映射逻辑放在 bean 配置中不是一个好的决定。
在ModelMapper
的bean配置中设置映射逻辑完全没问题。
映射是那个class的实际任务,所以应该在创建的时候配置。
不过,我更喜欢创建多个专用映射器定义,每个类型或一组相关类型一个。
这样做可以将配置方面与控制器中映射器的实际使用分开,而不会在一个 class 中创建一大堆不相关的映射配置代码。
实际上,在每个控制器中配置映射器会违反 DRY(不要重复自己)和 SoC(关注点分离)等原则。
在您的情况下(单例 ModelMapper
),您可以为要映射的每个类型或类型组创建 @Configuration
-注释 classes。
在该 class 中,您将收到 ModelMapper
并添加类型映射。
将您的配置代码添加到
- 一个
ModelMapper
-接收构造函数或
- 一个
@PostConstruct
注释方法,它访问 @Autowired
ModelMapper
属性。
我自己还没有用过 ModelMapper
但是在查看它的代码库之后我猜想如果你按照你原来的方法,内存使用量不会增加但是你会发现重复映射被抛出的异常.
我将 ModelMapper 与 Spring 一起使用。在我的控制器中 class 我正在自动装配 ModelMapper bean:
@Autowired
private ModelMapper mapper;
我想在我的模型 class 和我的控制器方法中的 DTO 之间进行显式映射,例如:
modelMapper.addMappings(mapper -> {
mapper.map(src -> src.getBillingAddress().getStreet(),
Destination::setBillingStreet);
mapper.map(src -> src.getBillingAddress().getCity(),
Destination::setBillingCity);
});
然后使用映射器映射classes。
我的问题是,在每个控制器方法调用中添加显式映射是否正确?对象 modelMapper 的内存大小会开始增长吗?
其他解决方案是在创建 ModelMapper bean 时仅添加一次映射,但我认为将映射逻辑放在 bean 配置中不是一个好的决定。
在ModelMapper
的bean配置中设置映射逻辑完全没问题。
映射是那个class的实际任务,所以应该在创建的时候配置。
不过,我更喜欢创建多个专用映射器定义,每个类型或一组相关类型一个。
这样做可以将配置方面与控制器中映射器的实际使用分开,而不会在一个 class 中创建一大堆不相关的映射配置代码。 实际上,在每个控制器中配置映射器会违反 DRY(不要重复自己)和 SoC(关注点分离)等原则。
在您的情况下(单例 ModelMapper
),您可以为要映射的每个类型或类型组创建 @Configuration
-注释 classes。
在该 class 中,您将收到 ModelMapper
并添加类型映射。
将您的配置代码添加到
- 一个
ModelMapper
-接收构造函数或 - 一个
@PostConstruct
注释方法,它访问@Autowired
ModelMapper
属性。
我自己还没有用过 ModelMapper
但是在查看它的代码库之后我猜想如果你按照你原来的方法,内存使用量不会增加但是你会发现重复映射被抛出的异常.