我有MyObject
的反序列化程序,它扩展了StdDeserializer<MyObject>
。在其deserialize(JsonParser p, DeserializationContext ctxt)
中,我想将我反序列化的节点的子节点转换为pojos列表。鉴于json喜欢
{
"property1" : "value1",
...
"subnode" : [
{
"snProperty1" : "value1",
"snProperty2" : "value2",
...
"snPropertyN" : "valueN"
},
{ ... }, // other elements like the one above
{ ... }
],
...
}
和pojos
class Subnode {
private String snProperty1;
private String snProperty2;
...
private Stirng snPropertyN;
// getters and setters
}
class MyObject {
private String property1;
...
private List<Subnode> subnodes;
// getters and setters
}
我希望反序列化器能够处理所有Subnode
个对象,而无需自己迭代和使用Subnode
setter。与TypeReference
和ObjectMapper
类似的内容。
实例化ObjectMapper
以实现上述目标的唯一方法是什么?例如
objectMapper.convertValue(subnode, new TypeReference<List<Subnode>>() {});
答案 0 :(得分:0)
我使用解析器(ObjectMapper
)编解码器在不使用p
的情况下解决了这个问题。
List<Subnode> subnodes = new ArrayList<>();
if (myObject.hasNonNull("subnodeList")) {
ObjectCodec codec = p.getCodec();
for (JsonNode subnode : myObject.get("subnodeList")) {
subnodes.add(codec.treeToValue(subnode, Subnode.class));
}
}
myObject.setSubnodes(subnodes);