我試圖將Jsonpath的輸出直接映射到POJO列表。 我使用傑克遜作爲地圖提供者。將Jsonpath輸出映射到POJO列表
Jsonpath輸出:
{
"actions" : [
{
"parameterDefinitions" : [
{
"defaultParameterValue" : {
"name" : "PARAM1",
"value" : ""
},
"description" : "Type String",
"name" : "PARAM1",
"type" : "StringParameterDefinition"
},
{
"defaultParameterValue" : {
"name" : "PARAM3",
"value" : ""
},
"description" : "Type String",
"name" : "PARAM3",
"type" : "StringParameterDefinition"
}
]
}
]
}
JobParameter.java(該POJO其中我想映射):
public class JobParameter {
private String description;
private String name;
private String type;
// public getters & setters
Jsonpath初始化:
Configuration conf = Configuration
.builder()
.mappingProvider(new JacksonMappingProvider())
.build();
List<JobParameter> jobParameters = JsonPath
.using(conf)
.parse(jsonpathOutput)
.read("$.actions[0].parameterDefinitions[0:]", List.class);
使用上面的代碼,我總是得到一個地圖。見一個toString()這張地圖上的結果如下:
[{defaultParameterValue={name=PARAM1, value=}, description=Type String, name=PARAM1, type=StringParameterDefinition}, {defaultParameterValue={name=PARAM3, value=}, description=Type String, name=PARAM3, type=StringParameterDefinition}]
需要注意的是,當我嘗試映射Jsonpath輸出到單個對象,反序列化工作正常:
Configuration conf = Configuration
.builder()
.mappingProvider(new JacksonMappingProvider())
.build();
JobParameter singleJobParameter = JsonPath
.using(conf)
.parse(jsonpathOutput)
.read("$.actions[0].parameterDefinitions[0]", JobParameter .class);
在這個例子中在上面,singleJobParameter實例已被很好地創建和填充。
我錯過了什麼嗎? 謝謝!
非常有趣,但不回答問題:-) – tduchateau