我试图将 ObjectId
存储为 HttpSession
属性,然后稍后在程序中检索它。但是,当尝试检索 new ObjectId((String)session.getAttribute("id"))
NullPointerException
这是存储ObjectId的代码:
HttpSession session = request.getSession();
session.setAttribute("id", collection.find(eq("email", email)).first().getObjectId("_id").toHexString());
session.setAttribute("user_type", userType);
这是检索 ObjectId 的代码:
HttpSession session = request.getSession();
ObjectId id = new ObjectId((String)session.getAttribute("id"));
有趣的是,以下代码不会产生`NullPointerException:
HttpSession session = request.getSession();
System.out.println(session.getAttribute("id").toString());
由此可见,ObjectId
确实作为属性存储在 HttpSession 中,但由于某种原因,在尝试在 HttpSession 中检索它时会创建 NullPointerException
就像我做的那样。
如何以不产生此异常的方式检索 ObjectId
?
最佳答案
如果您的 session
为 null 或您的 session.getAttribute("id")
返回 null<,则可能会发生此
.NPE
/
您必须验证其中任何一个是否为空,然后应用一些更正。
我认为您可以尝试以下方法来避免NPE
。
HttpSession session = request.getSession();
if(session == null){
System.println("session is null");
}else{
Object _id = session.getAttribute("id");
ObjectId id = _id != null ? new ObjectId((String)_id) : _id;
}
或者您可以在 IDE 中尝试一些调试器来准确识别问题。
关于java - 如何在 HttpSession 中存储 ObjectId 并检索它? (MonoDB Java 驱动程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56454148/