Respect only explicit mappings but fail on unmapped source fields
Use case
Imagine a PATCH request with several JsonNullable fields.
class MyDto { private JsonNullable<String> firstname; private JsonNullable<String> surname }
The mapper should overwrite present fields only:
@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, unmappedSourcePolicy = ReportingPolicy.ERROR) interface MyPartialUpdateMapper { @Mapping(source = "firstname", target = "firstname", conditionExpression = "java(updatedContent.getFirstname().isPresent())") @BeanMapping(ignoreByDefault = true) void updateMyDomainObject(@MappingTarget MyDomainObject domain, MyDto updatedContent); default <T> T fromJsonNullable(JsonNullable<T> nullableValue) { if(nullableValue.isPresent()) { return nullableValue.get(); } return null; } }
The @BeanMapping(ignoreByDefault = true) is used to ensure that only those fields in the domain object that are set in the Patch-DTO are overwritten. Unfortunately, the unmappedSourcePolicy = ReportingPolicy.ERROR is ignored in this case.
As far as I can see, there is no way to enforce explicit mapping and cause the build to fail if one of the mappings is forgotten. This feature would make the mappings much better maintainable in such situations.
Generated Code
No response
Possible workarounds
No response
MapStruct Version
1.5.3.Final