为什么JsonParser返回null?

时间:2016-07-31 12:41:51

标签: java json spring-boot tree json-deserialization

我有一个自定义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)

0 个答案:

没有答案
相关问题