nullValuePropertyMappingStrategy 不起作用
nullValuePropertyMappingStrategy not working
我有以下映射器
@Mapper(config = MappingConfig.class)
public interface PokerRoomMapper {
@Mapping(target = "phase", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
}
传递给它的 pokerRoomDto 有一个可以为空的“阶段”字段。我希望这个字段在它为空时被忽略。但是现在“null”值仍然映射到 pokerRoom 实体。
如果我只是忽略映射器中的字段,它会起作用,并且 PokerRoom 中阶段的默认值保持不变,但我不想总是忽略它。
@Mapper(config = MappingConfig.class)
public interface PokerRoomMapper {
@Mapping(target = "phase", ignore = true)
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
}
这按设计工作。 NullValuePropertyMappingStrategy
仅适用于更新方法。它不用于法线贴图。
我认为您正在寻找 NullValueCheckStrategy
,如果您使用 NullValueCheckStrategy#ALWAYS
,那么 MapStruct 将始终执行非 PokerRoomDto
的空检查并且仅调用 setter在 PokerRoom
上,如果值不是 null
如果您在声明时初始化您的字段并希望保留该值,我想出了一个解决方案。
有点 hacky,不是很笼统(取决于生成的变量名),但有效。
假设:
class PokerRoom {
Integer phase = 0;
}
您可以使用
@Mapping(target = "phase", defaultExpression = "java( pokerRoom.getPhase() )")
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
一个更简单的解决方案是使用与字段声明相同的常量。
@Mapping(target = "phase", defaultValue = "0")
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
我有以下映射器
@Mapper(config = MappingConfig.class)
public interface PokerRoomMapper {
@Mapping(target = "phase", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
}
传递给它的 pokerRoomDto 有一个可以为空的“阶段”字段。我希望这个字段在它为空时被忽略。但是现在“null”值仍然映射到 pokerRoom 实体。
如果我只是忽略映射器中的字段,它会起作用,并且 PokerRoom 中阶段的默认值保持不变,但我不想总是忽略它。
@Mapper(config = MappingConfig.class)
public interface PokerRoomMapper {
@Mapping(target = "phase", ignore = true)
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
}
这按设计工作。 NullValuePropertyMappingStrategy
仅适用于更新方法。它不用于法线贴图。
我认为您正在寻找 NullValueCheckStrategy
,如果您使用 NullValueCheckStrategy#ALWAYS
,那么 MapStruct 将始终执行非 PokerRoomDto
的空检查并且仅调用 setter在 PokerRoom
上,如果值不是 null
如果您在声明时初始化您的字段并希望保留该值,我想出了一个解决方案。 有点 hacky,不是很笼统(取决于生成的变量名),但有效。 假设:
class PokerRoom {
Integer phase = 0;
}
您可以使用
@Mapping(target = "phase", defaultExpression = "java( pokerRoom.getPhase() )")
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
一个更简单的解决方案是使用与字段声明相同的常量。
@Mapping(target = "phase", defaultValue = "0")
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);