我有一个yaml文件,看起来像这样:
defaultSettings:
a: 1
b: foo
entries:
- name: one
settings:
a: 2
- name: two
settings:
b: bar
- name: three
假设我有这些课程:
class Settings {
public int a;
public String b;
}
class Entry {
public String name;
public Settings settings;
}
class Config {
public Settings defaultSettings;
public List<Entry> entries;
}
关键是我想用 defaultSettings
在文件的顶部为单个条目中未指定的任何设置指定。所以,这些条目会像这样写出来:
- name: one
settings:
a: 2
b: foo
- name: two
settings:
a: 1
b: bar
- name: three
settings:
a: 1
b: foo
有没有一个好的方法可以做到这一点(例如,与Jackson,snakeyaml等)?我对代码有完全的控制权,所以如果这能带来更好的处理方式,我可以进行修改。
1条答案
按热度按时间nhhxz33t1#
最后我做了这个,很有效:
然后是Jackson:
本质上,这设置了一个静态
Settings
(假设defaultSettings
在文件中首先发生)。在yaml中指定了部分设置块的情况下,将使用settings 0-arg构造函数创建Config.defaultSettings
然后jackson用文件中指定的内容修改它。如果没有settings
文件中有块Entry
,Config.defaultSettings
直接使用(通过中的字段初始化Entry
). 不错,比编写自定义反序列化程序要好。如果有人有更好的方法,我还是很感兴趣的。