NPE не встречается и не попадает в сервлет - PullRequest
1 голос
/ 29 июля 2010

У меня есть довольно простой сервлет

public class DreambearLoginServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        JSONObject ret = new JSONObject();

        try {

            // handle the request
            try {

                String action = req.getParameter("action");

                if (action.equals("login")) {

                    ...

                } else if (action.equals("checklogin")) {

                    ...

                } else {
                    throw new RuntimeException("Action invalid");
                }

            } catch (Exception e) {
                ret.put("error", e.getMessage());
                e.printStackTrace();
            }

            // write response
            resp.setContentType("application/json");
        resp.getWriter().print(ret.toString());
            resp.getWriter().flush();

        } catch (JSONException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }

    }



}

Теперь, если я вызываю это без указания параметра строки запроса action, в оператор action.equals("login") следует добавить NullPointerException.Это приведет к выполнению кода перехвата и выводу JSON {"error": "Whatever NPE says"}.Как ни странно, вывод JSON просто {}.Как это могло быть?

Ответы [ 2 ]

3 голосов
/ 29 июля 2010

e.getMessage() равно null для NullPointerException, а документация JSONObject.put () гласит:

Поместите пару ключ / значение в JSONObject. Если значение равно нулю, то ключ будет удален из JSONObject, если он присутствует .

Таким образом, как и ожидалось, ничего не добавляется в ваш объект JSON.

0 голосов
/ 29 июля 2010

Вы правы, если NPE случится, оно будет поймано вашим предложением поймать. Значит, ты прав, этого не может быть!

  • Вы уверены, что это запрос на получение?
  • Вы уверены, что ваш код не останавливается где-то еще?
  • Может ли действие быть пустым?
  • Возможно, сообщение в NullPointerException пусто?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...