MapStruct:源属性为Null时使用备选属性的实现方法
MapStruct 空值 fallback 映射的实现方法
MapStruct本身没有你期望的alternativeWhenNull这种直接属性,但有几种简便方式实现“源属性为null时用替代属性”的需求:
直接用表达式注解实现
借助SpEL表达式,在@Mapping里直接写空值判断逻辑,一步到位:@Mapping(target = "myTargetProperty", expression = "java( source.getMySourceProperty() != null ? source.getMySourceProperty() : source.getMyAltSourceProperty() )")这种写法不需要额外写方法,适合单次使用的场景。
自定义复用方法
如果多个属性都需要类似的空值 fallback 逻辑,可以写一个带命名的默认方法,然后在映射里引用:@Mapper public interface MyMapper { MyMapper INSTANCE = Mappers.getMapper(MyMapper.class); @Mapping(target = "myTargetProperty", source = "source", qualifiedByName = "nullFallback") TargetDto convertToTarget(SourceEntity source); @Named("nullFallback") default String useFallbackWhenNull(SourceEntity source) { return source.getMySourceProperty() != null ? source.getMySourceProperty() : source.getMyAltSourceProperty(); } }这种方式代码更整洁,逻辑复用性强。
如果想完全实现你示例里那种简洁的注解写法,需要自定义MapStruct扩展注解并实现对应的处理器,这反而会增加复杂度,所以上面两种方案是更实用的简便选择。
内容的提问来源于stack exchange,提问作者eriksmith200
相关产品推荐
相关产品推荐

