我有一个自定义JSON Deserializer
,但它会出现一些错误(TreeNode<Department>
是一个Java树结构类)。
public TreeNode<Department> deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
return parseDepartment(jp);
}
private TreeNode<Department> parseDepartment(JsonParser jp) throws JsonProcessingException, IOException{
JsonNode node=jp.getCodec().readTree(jp);
if(node.has("name")){
String name=node.get("name").asText();
TreeNode<Department> n1 = new LinkedMultiTreeNode<Department>(new Department(name));
if(node.has("department")&&node.get("department").isArray()){
ArrayNode departments=(ArrayNode)node.get("department");
Collection<TreeNode<Department>> backNodes=parseDepartments(jp,departments);
if(backNodes!=null){
backNodes.forEach(e->{
n1.add(e);
});
}
}
return n1;
}
else{
return null;
}
}
和另一种私人方法:
private Collection<TreeNode<Department>> parseDepartments(JsonParser jp,ArrayNode arrayNode) throws JsonProcessingException, IOException{
Collection<TreeNode<Department>> a=new HashSet<>();
JsonNode node=jp.getCodec().readTree(jp);
// why here "node" is null?
if(arrayNode==null) return null;
arrayNode.forEach(e->{
try {
log.info(e.toString());
TreeNode<Department> m=parseDepartment(jp);
if(m!=null){
a.add (m);
log.info(a.toString());
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
);
return a;
}
当我运行test
时:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(TreeNode.class, new DepartmentDeserializer());
mapper.registerModule(module);
TreeNode<Department> n=mapper.readValue(json, TreeNode.class);
System.out.println(n);
错误是:
java.lang.NullPointerException --jp.getCodec()。readTree(jp)