Reputation: 976
I have the following mapper
@Mapper(config = MappingConfig.class)
public interface PokerRoomMapper {
@Mapping(target = "phase", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
}
The pokerRoomDto which is passed to it has a "phase" field which can be null. I want this field to be ignored when it is null. But right now the "null" value still gets mapped to the pokerRoom entity.
If I just ignore the field in the mapper it works and the default value for phase in PokerRoom stays untouched however I dont want to always ignore it.
@Mapper(config = MappingConfig.class)
public interface PokerRoomMapper {
@Mapping(target = "phase", ignore = true)
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
}
Upvotes: 5
Views: 7399
Reputation: 2142
If you initialise your field at declaration and want to keep that value, I've come up with a solution. A bit hacky, not very general (depends on generated variable name), but works. Assuming:
class PokerRoom {
Integer phase = 0;
}
You can use
@Mapping(target = "phase", defaultExpression = "java( pokerRoom.getPhase() )")
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
A simpler solution would be to use the same constant you use at field declaration.
@Mapping(target = "phase", defaultValue = "0")
PokerRoom pokerRoomDtoToPokerRoom(PokerRoomDto pokerRoomDto);
Upvotes: 1
Reputation: 21393
This works as designed. NullValuePropertyMappingStrategy
is only applied to update method. It is not used for normal mappings.
I think that you are looking for NullValueCheckStrategy
, if you use NullValueCheckStrategy#ALWAYS
then MapStruct will always do a null check non the PokerRoomDto
and only invoke the setter on the PokerRoom
if the value was not null
Upvotes: 5