ModelMapper LinkedHashMap в LinkedHashMap ArrayIndexOutOfBoundsException - PullRequest
0 голосов
/ 05 августа 2020

Я работал над проектом, в котором некоторые новые данные о статусе загружаются в объект и применяются через ModelMapper к текущим данным статуса объекта. Поля сопоставляются и обновляются автоматически, что приятно.

Теперь я добавил более сложные данные в виде списка >. И что-то ломается.

Вот упрощенный код:

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>  map = new LinkedHashMap();
             map.put("key1","value1");
             map.put("key2","value2");
             map.put("key3","value3");
            
             List<Map<String, String>> list = new ArrayList<Map<String, String>>();         
             list.add(map);
            
             typeA.setListOfMap(list);         
             typeB.setListOfMap(list);     // 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 > введите правильно?

спасибо всем

...