Обычно Object Mappers предназначены для сценариев, чтобы отобразить больший набор данных в небольшой набор (пример: Entity
объект имеет много данных, но мы хотим вернуть только несколько из них).
Сопоставители объектов обычно создают новый экземпляр целевого объекта небольшого набора и устанавливают необходимые поля из исходного объекта с большим набором, но у меня есть противоположный сценарий: у меня есть целевой объект, который уже содержит некоторые данные, и теперь мне нужно сопоставить новый исходный объект с меньшими данными, установленными в целевой объект.
Исходный класс
public class SrcObj {
private String name;
private int i;
Класс назначения
public class DestObj {
private String name;
private int i;
private float f;
private boolean b;
DesObj уже содержит значения int i и float f, SrcObj имеет имя String и int, мне нужно сохранить данные SrcObj в DestObj без потери существующих данных.
Model Mapper всегда создает новый объект DestObj, который будет отображать в него SrcObj, но остальные поля будут нулевыми.
public class ObjectMapper {
public static void main(String[] args) {
SrcObj src = new SrcObj("src name", 1);
DestObj dest = new DestObj(null, 0, 1, true);
ModelMapper modelMapper = ObjectMapper.modelMapper();
dest = modelMapper.map(src, DestObj.class);
System.out.println(dest);
}
private static ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
PropertyMap<SrcObj, DestObj> orderMap = new PropertyMap<SrcObj, DestObj>() {
protected void configure() {
// map().setI(destination.getI());
map().setI(source.getI());
System.out.println("model mapper");
map().setName(source.getName());
}
};
modelMapper.addMappings(orderMap);
return modelMapper;
}
}
есть возможность в Model mapper использовать пункт назначения, прокомментированный выше, но он не работает.
как я могу получить destObj, содержащий все значения
destObj [name = "src name", i = 1, f = 1.1, b = true]