我在将json对象转换为POJO类时遇到问题。
我有一个名为Service的公共类,它有一个内部类User。我想使用内部类作为容器/对象来保存所有外部类方法的变量。我正在尝试执行以下操作,但我收到编译错误。请说明我如何做到这一点,请纠正我在下面的代码中所犯的错误。
从eclipse调试窗口,我看到下面的json是在节点变量中获得的 node:{“firstName”:“ndndbs”,“lastName”:“dnjdnjs”}
试验1:
public class Service {
// Method
public boolean createUserAccount(JsonNode node) throws Exception {
ObjectMapper mapper = new ObjectMapper();
User user=null;
try {
Service service=new Service();
user = mapper.readValue(node, User.class);
} catch (Exception e) {throw new Exception("failed to bind json", e);}
System.out.println("Use this anywhere in method"+userNode.firstName);
}
}
// Inner class
public class User {
public String firstName;
public String lastName;
}
}
OUTPUT:
NULL POINTER EXCEPTION AND user=null even after execution of mapper.readValue() statement
答案 0 :(得分:0)
来自声明
user = mapper.readValue(node, User.class);
不确定NullPointerException的原因(完整的堆栈跟踪可能有帮助)。似乎ObjectMapper试图通过Reflection创建内部类的实例。但是创建内部类和嵌套类的实例并不是直截了当的 Is it possible to create an instance of nested class using Java Reflection?。
在你的情况下
Service.User.class.class.getConstructors()[0].newInstance(serviceInstance);
而不是
User.class.newInstance()
这可能是Usual / Outer课程的一个例子。我不确定ObjectMapper
是否能够以这种方式实例化类。
我建议将User
移动到其自己的源User.java中的顶级公共类,除非您有特定的设计限制,我很想知道。