У меня есть карта значений примерно так:
Map<String, Object> values = Map.of("name", "myName", "address", null);
Я хочу обновить объект следующим образом:
class User {
String name;
String address;
String country;
}
Теперь я хочу, чтобы поля в User
былиперезаписывается только , если в исходной карте определен ключ.Таким образом, поле address
должно быть установлено на ноль (поскольку существует явное отображение на ноль), но поле country
не должно изменяться (поскольку на карте нет ключа "country"
).
Это похоже на то, что делает nullValuePropertyMappingStrategy = IGNORE
, но не совсем, поскольку проверка является проверкой map.containsKey
вместо стандартной нулевой проверки.
Могу ли я расширить MapStruct, чтобы он мог это делать?
Мой код MapStruct:
@Mapper
interface MyMapper {
@Mapping(target = "name", expression = "java( from.getMap().get(\"name\") )")
@Mapping(target = "address", expression = "java( from.getMap().get(\"address\") )")
@Mapping(target = "country", expression = "java( from.getMap().get(\"country\") )")
To get(MapWrapper from, @MappingTarget To to);
}