Как сохранить ObjectId в HttpSession и получить его? (Драйвер Java MonoDB) - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь сохранить ObjectId как атрибут HttpSession, а затем получить его позже в программе. Тем не менее, программа выдает NullPointerException при попытке получить new ObjectId((String)session.getAttribute("id"))

Это код для хранения 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, но по какой-то причине NullPointerException создается при попытке получить его так, как я это сделал.

Как бы я получил ObjectId таким образом, чтобы это исключение не выдавалось?

1 Ответ

0 голосов
/ 06 июня 2019

Это NPE может произойти, если ваш session равен нулю или если ваш session.getAttribute("id") возвращает null.

Вам нужно будет проверить, является ли какой-либо из них нулевым, а затем применить некоторую коррекцию.

Я думаю, что вы можете попробовать следующий подход, чтобы избежать 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, чтобы точно определить проблему.

...