MapStruct 忽略 source 中的空值属性
Bean 属性映射中如何满足以下场景:
- 给定一个有数据的 Bean 对象,该对象的数据可能从 DB 或其它什么地方获取而来
- 从前端传递一个 DTO 对象过来,将该对象的内容更新到 bean 中
- 忽略 DTO 中的空属性(NULL)
更新现有对象
一般的使用方法都是入参是旧对象,返回值是新对象。MapStruct 在调用的时候会使用构造方法创建一个全新的对象。
因此,要想实现更新给定对象的功能需要使用 @MappingTarget
注解。
以下代码,MapStruct 会生成基于 bean 的映射代码,不会重新创建对象。
1 | void update(DTO dto, ; Bean bean) |
忽略 source 的空值
默认情况下,MapStruct 的映射都是直接把来源的属性全都 set 到目标对象上的。一般情况都是直接 new 的对象,所以原来也没什么值。
如果要改变这个行为,我们可以修改 @Mapping
、@BeanMapping
、@Mapper
或 @MappingConfig
的 nullValuePropertyMappingStrategy
来配置。
该配置只对
@MappingTarget
注解的目标对象有效
1 |
|
这样的话,dto 中的空值就会被忽略,不会覆盖 bean 中已经存在的值。
参考
- [MapStruct 文档]: https://mapstruct.org/documentation/stable/reference/html/#mapping-result-for-null-properties
- [MapStruct - How to set different null strategy for different mapping methods?]: https://stackoverflow.com/questions/54174437/mapstruct-how-to-set-different-null-strategy-for-different-mapping-methods
MapStruct 忽略 source 中的空值属性
https://blog.imoe.tech/2020/04/21/29-mapstruct-null-properties-mapping/