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注释)。查看和