Разбор yaml с использованием привязки данных Джексона вызывает MismatchedInputException - PullRequest
0 голосов
/ 20 ноября 2018

Формат yaml, который я пытаюсь прочитать, выглядит следующим образом

- name: storage
  scm: git
  src: git+https://bitbucket.org/cer/linux_storage_jenkins.git
  version: '5'
- name: linux_jenkins
  scm: git
  src: git+https://bitbucket.org/cer/linux_jenkins.git
  version: '8'

Моя модель проста

public class Requirementsyml {
    //setter and getter in place
    private List<Requirement> items;
}

public class Requirement {
    private String name;
    private String scm;
    private String src;
    private String version;
}

Я пытаюсь прочитать содержимое yaml следующим образом:

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
Requirementsyml req = mapper.readValue(yaml_file_content, Requirementsyml.class);

Однако я получаю следующее исключение com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of Requirementsyml out of START_ARRAY token

Так как модель имеет список, я думаю, что входные данные не должны быть несоответствующими.Я попытался предоставить файл yaml как объект файла java, а не его содержимое в виде строки.Результат остается прежним.Чего мне не хватает?

1 Ответ

0 голосов
/ 20 ноября 2018

структура yaml должна иметь items массив / список

items:
- name: storage
  scm: git
  src: git+https://bitbucket.org/cer/linux_storage_jenkins.git
  version: '5'
- name: linux_jenkins
  scm: git
  src: git+https://bitbucket.org/cer/linux_jenkins.git
  version: '8'

, иначе вы можете прочитать ее как список требований без изменения yaml

@Test
void test() throws IOException {
    ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
    List<Requirement> requirements = mapper.readValue(new File("src/test/resources/requirements.yml"), new TypeReference<List<Requirement>>() {});
    assertEquals(2, requirements.size());
}

, также убедитесь, чтоRequirement и другой класс не имеет конструктора args, в противном случае установите соответствующие флаги на ObjectMapper

...