簡體   English   中英

snakeyaml命名約定

[英]snakeyaml naming convention

從我所看到的情況來看,似乎對yaml命名約定的建議是遵循軟件約定,因此在我的情況下為Java。

我收到了具有以下語法的yaml文件

PERSON:
  NAME: John Doe

除非我從PERSON更改為person,否則我無法使snakeyaml正確映射到我的Person對象。 我也嘗試過使用其他變量名,但似乎只有駝峰或小寫的對象名有效。 從PERSON更改為person時,我可以讀入所有大寫字母的屬性NAME,而沒有任何問題。 有人可以解釋為什么會這樣嗎?

public class Configuration {

  private Person person;

  public Configuration() {
    person = new Person();
  }

  public Person getPerson() {
    return person;
  }

  public void setPerson(Person person) {
    this.person = person;
  }

}

當我在yaml文件中將PERSON大寫時,無論我的getter / setter語法是什么,我都無法得到snakeyaml進行加載。 我已經嘗試使用實例變量作為PERSON來嘗試getPERSON / setPERSON,但是除非我在yaml文件中更改為person,否則它將無法正常工作。

您需要具有yaml文件中存在的字段名稱,因為snakeyaml內部使用了Reflection Api

所以您的課程看起來像這樣-

 class Configuration {

    public Person PERSON;

    public Person getPERSON() {
        return PERSON;
    }

    public void setPERSON(Person PERSON) {
        this.PERSON = PERSON;
    }
}

class Person {

    public String NAME;

    public String getNAME() {
        return NAME;
    }

    public void setNAME(String NAME) {
        this.NAME = NAME;
    }
}

需要注意的是場必須是公眾說明這里

然后,您需要傳遞帶有參數的Constructor類對象作為您的根類。

Yaml yaml = new Yaml(new Constructor(Configuration.class));

完整代碼

class Test {

    public static void main(String[] args) throws FileNotFoundException {
        String filePath = "path/to/configuartion/file/configuration.yaml";
        InputStream input = new FileInputStream(new File(filePath));
        Yaml yaml = new Yaml(new Constructor(Configuration.class));
        Configuration configuration = yaml.load(input);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM