[英]Error when parsing Yaml file - Cannot create property for JavaBean
Yaml
file contains: Yaml
文件包含:
test:
subHeading: "1234"
Model.java Model.java
class Model{
@JsonProperty("test")
private SubHeading subHead;
private class SubHeading{
@JsonProperty("subHeading")
private String text;
}
I try to parse above Yaml
content as follows: 我尝试将Yaml
内容解析如下:
Yaml yaml = new Yaml(new Constructor(Model.class));
System.out.println(yaml.load(new FileReader(PATH)).toString());
I immediately get an exception: 我立即得到一个例外:
Cannot create property=test for JavaBean=Model@13a5fe33
in 'reader', line 1, column 1:
test:
Any idea what I am doing wrong and what I can change here? 知道我做错了什么,可以在这里更改什么吗?
Fist of all you use Jackson
annotation but SnakeYaml
library to read a yaml
file. 所有拳头都使用Jackson
注释,但SnakeYaml
库用于读取yaml
文件。 You have to simplify your solution by: 您必须通过以下方式简化解决方案:
Jackson
使用Jackson
Jackson
annotation in cases where properties have the same name as values in annotation. 如果属性与注释中的值具有相同的名称,请删除Jackson
注释。 Model 模型
Create each class as public class
in new file. 在新文件中将每个类创建为public class
。
public class Model {
private SubHeading test;
public SubHeading getTest() {
return test;
}
public void setTest(SubHeading test) {
this.test = test;
}
@Override
public String toString() {
return "Model{" +
"test=" + test +
'}';
}
}
and 和
public class SubHeading {
private String subHeading;
public String getSubHeading() {
return subHeading;
}
public void setSubHeading(String subHeading) {
this.subHeading = subHeading;
}
@Override
public String toString() {
return "SubHeading{" +
"subHeading='" + subHeading + '\'' +
'}';
}
}
Example usage: 用法示例:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
public class YamlTest {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
mapper.enable(SerializationFeature.INDENT_OUTPUT);
String text = "test:\n" +
" subHeading: \"1234\"";
Model model = mapper.readValue(text, Model.class);
System.out.println(model);
}
}
Above prints: 以上印刷品:
Model{test=SubHeading{subHeading='1234'}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.