java - 使用 jackson databind 解析 yaml 会导致 MismatchedInputException

标签 java jackson yaml fasterxml

我试图读取的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:无法从 START_ARRAY token 中反序列化 Demandyml 实例

由于模型有一个列表,我认为输入不应不匹配。 我尝试将 yaml 文件提供为 java 文件对象,而不是其内容作为字符串。结果保持不变。我错过了什么?

最佳答案

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 和其他类没有参数构造函数,否则在 ObjectMapper 上设置适当的标志

关于java - 使用 jackson databind 解析 yaml 会导致 MismatchedInputException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53386476/

相关文章:

java - Tomcat、JBoss 和 Glassfish 有什么区别?

javascript - 将javascript日期转换为java sql日期错误

java - Jackson:根据字段存在选择子类进行反序列化

java - 使用 Jackson 将对象作为其属性之一进行编码(至于值对象,即原始类型包装器)

ruby - 访问 Ruby 项目的 YAML 文件中的环境变量(使用 ${ENVVAR} 语法)

java - 如何读取Spring XML配置中的application.yml?

r - 自动记录数据集

java - 具有多行文本文件的输入流读取器

Java 客户端使用的本地主机上的 C# WCF Web 服务

java - 如何从 JSON 输出字符串中提取各个数据片段?