Преобразователь модели сопоставляет Map‹String,Object› с классом, который расширяет другой общий класс, не работающий для поля списка

Я пытаюсь создать свой пользовательский объект конфигурации из карты с помощью средства сопоставления моделей. Все сопоставляется правильно, кроме свойства fields, которое поступает из универсального суперкласса.

Мой целевой объект

public class ADParserConfig extends CustomParserConfig<ADParserConfigField> {

private String pattern;

public String getPattern() {
    return pattern;
}

public void setPattern(String pattern) {
    this.pattern = pattern;
}

}

Это расширяет общий класс CustomParserConfig.

public class CustomParserConfig<T extends CustomParserConfigField> {

protected List<T> fields;
protected String timeStampField;

public List<T> getFields() {
    return fields;
}

public void setFields(List<T> fields) {
    this.fields = fields;
}

public String getTimeStampField() {
    return timeStampField;
}

public void setTimeStampField(String timeStampField) {
    this.timeStampField = timeStampField;
}
}

Где находится CustomParserConfigField

public class CustomParserConfigField {

protected String name;
protected Integer index;
protected String type;
protected String format;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getIndex() {
    return index;
}

public void setIndex(Integer index) {
    this.index = index;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getFormat() {
    return format;
}

public void setFormat(String format) {
    this.format = format;
}
}

Я пытаюсь сопоставить карту, используя функцию ниже

ADParserConfig adParserConfig = getConfig(map,ADParserConfig.class);

 public  <T extends CustomParserConfig> T getConfig(Map<String,Object> configObject, Class<T> classType){
    ModelMapper modelMapper = new ModelMapper();

    return modelMapper.map(configObject,classType);

}

Все, кроме fields, правильно отображается для карты ниже.

{fields=[{name=timeStamp, type=timestamp, format=dd/mm/yyyy HH:MM:SS a}, {name=logName, type=string}], pattern=(?<timeStamp>\d{2}\/\d{2}\/\d{4}\s\d{2}:\d{2}:\d{2}\s[AMPMampm]{2})?\s(LogName=(?<logName>[\w\s\W]+))?\sSourceName=(?<sourceName>[\w\s\W]+)\sEventCode=(?<eventCode>[0-9]*), timeStampField=timestamp}

Пожалуйста помоги. Почему проблема возникает только для объектов полей? Нужно ли указывать что-то еще в настройках картографа?


person Bill Goldberg    schedule 01.08.2018    source источник
comment
comment
Спасибо Чун Хан Хасио. Есть ли обходной путь для того же самого? Могу ли я добиться этого с помощью пользовательского картографа?   -  person Bill Goldberg    schedule 01.08.2018
comment
Я попробовал обходной путь выше, и он не работает. Получает меня ниже ошибки. org.modelmapper.MappingException: ModelMapper mapping errors: 1) Failed to instantiate instance of destination java.util.List. Ensure that java.util.List has a non-private no-argument constructor.   -  person Bill Goldberg    schedule 01.08.2018
comment
1) Я добавил трассировку стека здесь в качестве комментария. Слишком длинный, чтобы добавить комментарий о переполнении стека. 2) Я использую версию - 2.1.0   -  person Bill Goldberg    schedule 02.08.2018
comment
Я только что проверил последнюю версию modelmapper с добавленным вами исправлением. Работает как часы ! Спасибо. Не могли бы вы добавить это как ответ, чтобы я мог пометить его как решенный?   -  person Bill Goldberg    schedule 02.08.2018


Ответы (1)


Похоже на ошибку, и она была исправлена ​​пользователем #370.

person Chun Han Hsiao    schedule 02.08.2018
comment
Обходной путь имеет проблему, о которой я упоминал в комментариях к вопросам. Не могли бы вы проверить это и попытаться решить, чтобы я мог принять этот ответ? #370 работает как шарм! Но не работа вокруг. - person Bill Goldberg; 02.08.2018
comment
Вы правы, я пробовал последнюю стабильную сборку modelmapper, и обходной путь не сработал. Я уберу этот обходной путь и попытаюсь выяснить, есть ли какой-либо другой обходной путь, который мы можем применить. - person Chun Han Hsiao; 02.08.2018
comment
Привет Чун Хан: Есть идеи, что это исправление будет выпущено в репозиторий maven? Сейчас я занимаюсь сборкой локального репозитория maven. - person Bill Goldberg; 07.08.2018
comment
Я только что выпустил modelmapper v2.1.1. - person Chun Han Hsiao; 12.08.2018
comment
Прохладный. Большое спасибо, Чун Хань Сяо. Модельный маппер просто офигенный. - person Bill Goldberg; 13.08.2018