当 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);
好吧,我在 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);