[英]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.