我有 A 类、B 类和 C 类。A 类有三个变量,它根据 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条经验 获得超10个赞
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
添加回答
举报
0/150
提交
取消