我一直在从事一个项目,其中一些新的状态数据被提取到一个对象中,并通过ModelMapper对当前的对象状态数据进行应用。字段被匹配并自动更新,这是很好的。
现在,我以List>的形式添加了一些更复杂的数据。
一切都在破裂。
以下是简化的代码:
public class TypeA {
private List<Map<String, String>> listOfMap;
}
public class TypeB {
private List<Map<String, String>> listOfMap;
}
public class Test {
public static void main(String[] args) {
TypeA typeA = new TypeA();
TypeB typeB = new TypeB();
Map<String, String> m1 = new LinkedHashMap();
m1.put("test1","machin");
m1.put("test2","truc");
m1.put("test3","bidule");
Map<String, String> m2 = new LinkedHashMap();
m2.put("test1","machin");
m2.put("test2","truc");
List<Map<String, String>> l1 = new ArrayList<Map<String, String>>();
l1.add(m1);
List<Map<String, String>> l2 = new ArrayList<Map<String, String>>();
l2.add(m2);
typeA.setListOfMap(l1);
typeB.setListOfMap(l2); // this can be set to null to fix the problem
ModelMapper modelmapper = new ModelMapper();
try {
modelmapper.map(typeA, typeB);
} catch (Exception e) {
e.printStackTrace();
}
}
}如果typeB listOfMap是空的,一切正常。
但是,如果我们已经在listOfMap中有了另一个对象typeB上的值列表。
然后,当我们试图将A映射到B时,我们会得到以下错误:
1) Converter org.modelmapper.internal.converter.MapConverter@1f32e575 failed to convert java.util.LinkedHashMap to java.util.LinkedHashMap.
1 error
at org.modelmapper.internal.Errors.throwMappingExceptionIfErrorsExist(Errors.java:380)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:81)
at org.modelmapper.ModelMapper.mapInternal(ModelMapper.java:573)
at org.modelmapper.ModelMapper.map(ModelMapper.java:447)
at modelmapper_debug.Main.main(Main.java:30)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at org.modelmapper.internal.converter.MapConverter.convert(MapConverter.java:59)
at org.modelmapper.internal.converter.MapConverter.convert(MapConverter.java:1)
at org.modelmapper.internal.MappingEngineImpl.convert(MappingEngineImpl.java:303)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:110)
at org.modelmapper.internal.converter.MergingCollectionConverter.convert(MergingCollectionConverter.java:59)
at org.modelmapper.internal.converter.MergingCollectionConverter.convert(MergingCollectionConverter.java:1)
at org.modelmapper.internal.MappingEngineImpl.convert(MappingEngineImpl.java:303)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:110)
at org.modelmapper.internal.MappingEngineImpl.setDestinationValue(MappingEngineImpl.java:242)
at org.modelmapper.internal.MappingEngineImpl.propertyMap(MappingEngineImpl.java:188)
at org.modelmapper.internal.MappingEngineImpl.typeMap(MappingEngineImpl.java:152)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:115)
at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:72)
... 3 more这里发生了什么事?
我能修正这段代码使ModelMapper映射List>类型正确吗?
thx全
发布于 2021-08-06 09:04:41
当时,我正在使用modelmapper依赖性版本2.3.8运行这段代码。
更新到最新版本2.4.2解决了这个问题。
ModelMapper modelmapper = new ModelMapper();
try {
System.out.println(typeB.getListOfMap().toString());
modelmapper.map(typeA, typeB);
System.out.println(typeB.getListOfMap().toString());
} catch (Exception e) {
e.printStackTrace();
}如预期的那样:
[{test1=machin, test2=truc}]
[{test1=machin, test2=truc, test3=bidule}]https://stackoverflow.com/questions/63272283
复制相似问题