snakeyaml 命名约定
snakeyaml naming convention
据我所知,yaml 命名约定的建议似乎是遵循软件约定,所以在我的例子中 Java。
我得到了一个具有以下语法的 yaml 文件
PERSON:
NAME: John Doe
我无法让 snakeyaml 正确映射到我的 Person 对象,除非我从 PERSON 更改为 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 加载它。我已经尝试 getPERSON/setPERSON 将我的实例变量作为 PERSON,但它不起作用,除非我在 yaml 文件中更改为 person。
您需要在 yaml 文件中使用字段名称,因为 snakeyaml 内部使用反射 Api
所以你的 class 看起来像这样-
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;
}
}
请注意,字段必须是 public,如所述 here
然后你需要传递Constructorclass对象作为你的根class.
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);
}
}
据我所知,yaml 命名约定的建议似乎是遵循软件约定,所以在我的例子中 Java。
我得到了一个具有以下语法的 yaml 文件
PERSON:
NAME: John Doe
我无法让 snakeyaml 正确映射到我的 Person 对象,除非我从 PERSON 更改为 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 加载它。我已经尝试 getPERSON/setPERSON 将我的实例变量作为 PERSON,但它不起作用,除非我在 yaml 文件中更改为 person。
您需要在 yaml 文件中使用字段名称,因为 snakeyaml 内部使用反射 Api
所以你的 class 看起来像这样-
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;
}
}
请注意,字段必须是 public,如所述 here
然后你需要传递Constructorclass对象作为你的根class.
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);
}
}