如何使用 jackson 将 yaml 中的列表映射到 java 对象,以便返回父节点值?
How to map a list in yaml to java object using jackson so that parent node values can be returned?
我在我的 java 项目中使用 jackson
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.10.3</version>
</dependency>
我想将此 yaml 映射到 java classes
Settings:
- Setting: number1
Environments:
- Name: name
Value: 3
我现在能想到的是这个
public class MyYaml {
private Set<Setting> settings;
@JsonProperty("Settings")
public String getSettings() {
return settings;
}
public class Setting {
private String name;
private Environments environments;
@JsonProperty("??????????????????????")
public String getName() {
return name;
}
现在我的问题是如何将属性 name
映射到设置 class 以便它 returns name
作为值
字段名称。
一个完整的例子
@Getter @Setter @ToString // lombok for simplicity, can be written at hand
static class MyYaml {
private Set<Setting> settings;
}
@Getter @Setter @ToString
static class Setting {
@JsonProperty("setting") // << REQUIRED
private String name;
private Set<Environment> environments;
}
@Getter @Setter @ToString
static class Environment {
private String name;
private int value;
}
使用示例
System.out.println(new ObjectMapper(new YAMLFactory()).readValue("settings:\n" +
" - setting: setting1\n" +
" environments:\n" +
" - name: env1\n" +
" value: 31\n" +
" - name: env2\n" +
" value: 12\n" +
" - setting: setting2\n" +
" environments:\n" +
" - name: env2.1\n" +
" value: 2.31\n" +
" - name: env2.2\n" +
" value: 2.12\n", MyYaml.class));
有输出
MyYaml(settings=[
Setting(name=setting2,
environments=[Environment(name=env2.1, value=2),
Environment(name=env2.2, value=2)]),
Setting(name=setting1,
environments=[Environment(name=env1, value=31),
Environment(name=env2, value=12)])])
(注意:小写只是为了避免写下其余字段,您可以将它们添加为大写)
我在我的 java 项目中使用 jackson
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.10.3</version>
</dependency>
我想将此 yaml 映射到 java classes
Settings:
- Setting: number1
Environments:
- Name: name
Value: 3
我现在能想到的是这个
public class MyYaml {
private Set<Setting> settings;
@JsonProperty("Settings")
public String getSettings() {
return settings;
}
public class Setting {
private String name;
private Environments environments;
@JsonProperty("??????????????????????")
public String getName() {
return name;
}
现在我的问题是如何将属性 name
映射到设置 class 以便它 returns name
作为值
字段名称。
一个完整的例子
@Getter @Setter @ToString // lombok for simplicity, can be written at hand
static class MyYaml {
private Set<Setting> settings;
}
@Getter @Setter @ToString
static class Setting {
@JsonProperty("setting") // << REQUIRED
private String name;
private Set<Environment> environments;
}
@Getter @Setter @ToString
static class Environment {
private String name;
private int value;
}
使用示例
System.out.println(new ObjectMapper(new YAMLFactory()).readValue("settings:\n" +
" - setting: setting1\n" +
" environments:\n" +
" - name: env1\n" +
" value: 31\n" +
" - name: env2\n" +
" value: 12\n" +
" - setting: setting2\n" +
" environments:\n" +
" - name: env2.1\n" +
" value: 2.31\n" +
" - name: env2.2\n" +
" value: 2.12\n", MyYaml.class));
有输出
MyYaml(settings=[
Setting(name=setting2,
environments=[Environment(name=env2.1, value=2),
Environment(name=env2.2, value=2)]),
Setting(name=setting1,
environments=[Environment(name=env1, value=31),
Environment(name=env2, value=12)])])
(注意:小写只是为了避免写下其余字段,您可以将它们添加为大写)