У меня есть довольно простой сервлет
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 просто {}
.Как это могло быть?