简体   繁体   English

解析Yaml文件时出错-无法为JavaBean创建属性

[英]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: 您必须通过以下方式简化解决方案:

  1. Simplifying model 简化模型
  2. Use Jackson 使用Jackson
  3. Removing 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM