java - 如何在 HttpSession 中存储 ObjectId 并检索它? (MonoDB Java 驱动程序)

标签 java mongodb debugging nullpointerexception mongodb-java

我试图将 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/

相关文章:

java - java中的正则表达式用于匹配不包含在单引号中的字符串

javascript - 从 MongoDB (mongoose) 检索/发布图像

android - 编译器 Android Studio 中的错误?

mongodb - 需要一些建议 dockerizing MongoDB

javascript - 无法迭代 mongodb 集合

go - 由于错误 : could not attach to pid XXX: could not open debug info,无法调试 golang 应用程序 delve

java - 如何使用 lambda 表达式调试 stream().map(...)?

java - 使用正则表达式解析日志文件以显示多行数据

java - 在webapp中优雅地关闭ExecutorService?

java - 如果多个用户同时处理它,使用单例模式是否会使我的应用程序变慢