У меня есть классы A, B и C. Класс A имеет три переменные, и он заполняется на основе разных полей классов B и C. Когда я использую mapper для заполнения объекта, сохраняются только последние использованные значения mapper. Как я могу убедиться, что все значения заполнены. Я использую MapStruct mapper (версия 1.2.0) с Spring Boot версии 2.0.3
Sample code below:
Class A{
String a;
String b;
String c;
}
Class B{
String b1;
}
Class C{
String c1;
}
public interface AtoCmapper{
@Mappings({
@Mapping(target = "c", source = "source.c1")
})
A CtoA(C source);
@Mappings({
@Mapping(target = "c1", source = "source.c")
})
C AtoC(A source);
}
public interface AtoBmapper{
@Mappings({
@Mapping(target = "b", source = "source.b1")
})
A BtoA(B source);
@Mappings({
@Mapping(target = "b1", source = "source.b")
})
B AtoB(A source);
}
Class DAO{
@Autowired
AtoBmapper aToBMapper;
@Autowired
AtoCmapper aToCMapper;
public void testMapping(){
A aObject = new A();
aObject = aToBMapper(bObject); // Assume bObject is object to Type B and it is initialized properly
aObject = aToCMapper(cObject); // Assume cObject is object to Type B and it is initialized properly
}
//Now when I call testMapping() resulting A object only has value set for variable c, value of b is lost.
How can I make sure that Values from B and C are set properly to Class A
}




MapStruct может обновить существующие экземпляры!
Для этого введите новые методы сопоставления (или замените старые) вариантами, которые имеют второй аннотированный параметр @MappingTarget типа A (и в этом случае можно заменить тип возвращаемого значения на void):
// In AtoBmapper
@Mappings(...)
void updateAFromB(B source, @MappingTarget A target);
// In AtoCmapper
@Mappings(...)
void updateAFromC(C source, @MappingTarget A target);
Тогда вы можете написать:
A aObject = new A();
aToBMapper.updateAFromB(bObject, aObject);
aToCMapper.updateAFromC(cObject, aObject);
// now aObject should contain the cumulated data from b and c
Поиск в Google «Джексон обновить существующий объект» дал мне следующее: stackoverflow.com/questions/9895041/…
Взглянем. Спасибо, мне кажется, это может послужить моей цели.
Любая идея аналогичного метода, доступного в Джексоне, который считывает строку в уже доступный объект?