我有以下YAML文件:
(?<=redd\.it\/)(\w+)
https://redd.it/willmatchthis/butnotthis
我想和杰克逊一起读一个简单的---
-
id: 001
start: 21.11.2018
additional:
dependency:
result: 2
。
为此,我使用以下代码
List<Map<String, Object>>
不幸的是,这会返回仅包含 private List<Map<String, Object>> readDefaultInputAsMap() {
var objectMapper = new ObjectMapper(new YAMLFactory());
objectMapper.setDateFormat(new SimpleDateFormat("dd.MM.yyyy"));
try {
return objectMapper.readValue(inputResource, new TypeReference<List<Map<String, Object>>>() {
});
} catch (IOException e) {
e.printStackTrace();
return new ArrayList<>();
}
}
,id
和start
的地图,因此其他两个都将被忽略。
我如何让Jackson解析文件并创建完整地图,例如result
作为空键的值? (或其他任何默认值)?
答案 0 :(得分:1)
您应该使用所需的所有可能属性创建自己的Object(新类),例如:
class MyCompleteInfo {
String id;
String start;
String additional;
String dependency;
String result;
}
并使用它的列表(作为方法返回,并在您的阅读器中):
List<MyCompleteInfo >
编辑:您可能在某处使用了@JsonInclude(Include.NON_EMPTY)? 你一定不能。
请参见documentation。
答案 1 :(得分:1)
实际上,默认情况下会这样做。仔细检查您的YML格式(因为您的示例似乎无效)。这是对我有用的东西:
test.yml :
---
- id: 001
start: 21.11.2018
additional:
dependency:
result: 2
Test.java :
public class App {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
objectMapper.setDateFormat(new SimpleDateFormat("dd.MM.yyyy"));
try {
final Object value = objectMapper.readValue(App.class.getResource("test.yml"), new TypeReference<List<Map<String, Object>>>() {
});
System.out.println(value);
} catch (IOException e) {
e.printStackTrace();
}
}
}
我得到了结果:
[{id=1, start=21.11.2018, additional=null, dependency=null, result=2}]
如您所见,additional
和dependency
都是null
。