java - 使用 FasterXML 解析带有别名的 yml 文件
问题描述
我有一个包含多个对象的 yaml 文件和一个使用 yaml v1.2 规范中的锚点/别名(&/*)的列表:
key1:
subkey: &myalias
- attr1: valueX
attr2: valueY
attr3: valueZ
- attr1: another_valueX
attr2: another_valueY
attr3: another_valueZ
key2:
subkey: *myalias
我有以下 Java 类:
package com.acme.model;
import lombok.Data;
import java.io.Serializable;
@Data
public class FileObject implements Serializable {
private KeyObject key1;
private KeyObject key2;
public FileObject() {}
}
---
package com.acme.model;
import lombok.Data;
import java.io.Serializable;
@Data
public class KeyObject implements Serializable {
private SubkeyList subkey;
public KeyObject() {}
}
---
package com.acme.model;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
@Data
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "subkeyId")
public class SubkeyList extends ArrayList<SubkeyObject> implements Serializable {
private String subkeyId;
public SubkeyList() {}
}
---
package com.acme.model;
import lombok.Data;
import java.io.Serializable;
@Data
public class SubkeyObject implements Serializable {
private String attr1;
private String attr2;
private String attr3;
public SubkeyObject() {}
}
我正在尝试按如下方式解析文件以获取 FileObject:
ObjectReader reader = new ObjectMapper(new YAMLFactory()).readerFor(FileObject.class);
InputStream in = this.getClass().getClassLoader().getResourceAsStream("file.yml");
FileObject fileObject = reader.readValue(in);
但是发生了以下异常:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.acme.model.SubkeyList<com.acme.model.SubkeyObject>` out of VALUE_STRING token
at [Source: (BufferedInputStream); line: 10, column: 11] (through reference chain: com.acme.model.FileObject["key2"]->com.acme.model.KeyObject["subkey"])
我还没有找到将别名和锚点与列表或地图一起使用的文档,仅与对象一起使用。
解决方案
推荐阅读
- node.js - 控制器没有按预期工作
- ios - 使用 ARKit 和 LiDAR 扫描物体并获取所述物体的尺寸
- scala - 在 Spark Scala 中计算过去 3 个值的平均值
- ios - Apple 的操作系统中实现的这四个伊斯兰日历是什么?
- bash - 如何将给定的字符串与 bash 中的多行文本进行比较?
- javascript - 何时在 Javascript 中设置调用堆栈?
- android - 如何从项目列表中删除项目详细信息
- android-studio - Horizontal RecyclerView 中的适配器代码错误
- php - PHP 7.3.2 shell_exec 输出突然停止工作
- reactjs - 此处不允许使用属性 jsx 警告 - WebStorm 中的样式 JSX