Java 当源为null MapStruct时,另一个bean属性的默认值
我在MapStruct中有以下映射器:Java 当源为null MapStruct时,另一个bean属性的默认值,java,mapstruct,Java,Mapstruct,我在MapStruct中有以下映射器: @Mapping(source = "payload.after", target = "payload") TargetEntity toTarget(SourceEntity source); 有时,payload.after为空,我需要填充另一个名为payload.before的属性。大概是这样的: @Mapping(source = "payload.after", target
@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文档中,我发现只有您可以使用预定义值:
但您可以通过使用诸如@AfterMapping
或@BeforeMapping
签入MapStruct文档示例:)之类的注释轻松完成此操作
编辑:
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
}
@Mapping(target = "payload", source = "payload.after", defaultExpression = "java(source.getPayload().getBefore())")
TargetEntity toTarget(SourceEntity source);