Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当源为null MapStruct时,另一个bean属性的默认值_Java_Mapstruct - Fatal编程技术网

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

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

我在MapStruct中有以下映射器:

 @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);