[英]Why JsonParser is returning null?
我有一个自定义的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)
该错误表明jp.getCodec()
返回null
。 这样的事情对我有用。
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(TreeNode.class, new DepartmentDeserializer());
mapper.registerModule(module);
JsonFactory jsonFactory = new JsonFactory(mapper);
JsonParser jsonParser = jsonFactory.createParser(json);
TreeNode<Department> n=mapper.readValue(jsonParser, TreeNode.class);
System.out.println(n);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.