Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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 NullValueProperty映射策略不工作_Java_Mapstruct - Fatal编程技术网

Java NullValueProperty映射策略不工作

Java NullValueProperty映射策略不工作,java,mapstruct,Java,Mapstruct,我有下面的地图 @Mapper(config = MappingConfig.class) public interface PokerRoomMapper { @Mapping(target = "phase", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto poke

我有下面的地图

@Mapper(config = MappingConfig.class)
public interface PokerRoomMapper {

  @Mapping(target = "phase", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
  PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);

}
传递给它的pokerRoomDto有一个可以为空的“阶段”字段。我希望此字段为空时被忽略。但是现在“null”值仍然映射到pokerRoom实体

如果我只是忽略映射器中的字段,它会工作,PokerRoom中phase的默认值保持不变,但是我不想总是忽略它

@Mapper(config = MappingConfig.class)
public interface PokerRoomMapper {

  @Mapping(target = "phase", ignore = true)
  PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);

}

这是设计好的
NullValuePropertyMappingStrategy
仅应用于更新方法。它不用于法线映射


我认为您正在寻找
NullValueCheckStrategy
,如果您使用
NullValueCheckStrategy#ALWAYS
,则MapStruct将始终对
PokerRoomDto
执行null检查,并且仅在
PokerRoom
上调用setter,如果该值不是
null

PokerRoom
上的阶段是否具有默认值?如果没有,那么我不确定您是如何确定映射不起作用的。如果mapstruct在映射过程中忽略了一个没有默认值的字段,那么映射后该字段将为空。是的,如果我使用第二个映射器忽略它,它的默认值将正确保持不变。根据javadoc for,仅适用于更新方法:更新预先存在的目标的方法(用@MappingTarget注释)。查看和