当 Source 为 null MapStruct 时,另一个 bean 的默认值 属性

Default value to another bean property when Source is null MapStruct

好吧,我在 MapStruct 中有以下 Mapper:

 @Mapping(source = "payload.after", target = "payload")
 TargetEntity toTarget(SourceEntity source);

有时 payload.after 为空,我需要用另一个 属性 填充,称为 payload.before。像这样:

 @Mapping(source = "payload.after", target = "payload")
   //OR, if payload.after is null
 @Mapping(source = "payload.before", target = "payload")
 TargetEntity toTarget(SourceEntity source);

我试过这样使用,但没有用:

 @Mapping(source = "payload.after", target = "payload", defaultValue = "payload.before")
 TargetEntity toTarget(SourceEntity source);

有办法吗?

从 MapStruct 文档中我看到只有您可以使用预定义值:https://mapstruct.org/documentation/stable/reference/html/#default-values-and-constants

但是您可以使用 @AfterMapping@BeforeMapping 之类的注释轻松完成此操作,请查看 MapStruct 文档示例:)

编辑:

@Mapping(target = "otherTargetField", source = "otherSrcField")
TargetEntity toTarget(SourceEntity source);

@AfterMapping
void toTargetAfterMapping(@MappingTarget TargetEntity, SourceEntity source) {
   // Your after mapping logic with payload.before and payload.after
}

MapStruct auto-resolves表示在最后一个return语句之前的映射方法结束时调用此方法。如果您想了解更多信息,请参阅 MapStruct docs - customising mappings with before and after.

您可以使用的另一种方法是 defaultExpression

@Mapping(target = "payload", source = "payload.after", defaultExpression = "java(source.getPayload().getBefore())")
TargetEntity toTarget(SourceEntity source);