我有 A 類、B 類和 C 類。A 類有三個變量,它根據(jù) B 類和 C 類的不同字段進行填充。當我使用映射器填充對象時,只保留最后使用的映射器值。如何確保填充所有值。我正在使用 MapStruct 映射器(版本 1.2.0)和 Spring Boot 版本 2.0.3Sample 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}
1 回答

侃侃無極
TA貢獻2051條經(jīng)驗 獲得超10個贊
MapStruct 可以更新現(xiàn)有實例!為此,請通過具有@MappingTarget該類型的第二個注釋參數(shù)的變體引入新的映射方法(或替換舊的方法)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
添加回答
舉報
0/150
提交
取消