除非明确捕获,否则不会在控制台中显示异常
Exceptions not showing up in console unless explicitly caught
我正在使用 SparkJava,似乎在路由中抛出的异常不会显示在控制台中,除非我明确地捕获它们。
例如给定
Spark.post("/lookup", this::lookup);
和
private String lookup(Request req, Response res) {
// some stuff
return json.toString();
}
如果// some stuff
抛出异常,控制台中不会显示任何内容。但是,如果我明确捕获并打印异常,它会按预期将其打印到控制台。
private String lookup(Request req, Response res) {
try {
// some stuff
} catch(Exception e) {e.printStackTrace();}
return json.toString();
}
这让我相信在路由调用堆栈的更上层某处,所有异常都被捕获并隐藏了。
如您所想,此行为会导致一些相当令人沮丧的调试。有什么方法可以使所有异常始终显示在控制台中吗?
在您的 Main class 中,在任何路由之前添加:
exception(Exception.class, (exception, request, response) -> {
exception.printStackTrace();
});
任何未被您的应用程序代码捕获的异常现在都将转储到控制台。
(IMO Spark 应该默认执行此操作...)
我正在使用 SparkJava,似乎在路由中抛出的异常不会显示在控制台中,除非我明确地捕获它们。
例如给定
Spark.post("/lookup", this::lookup);
和
private String lookup(Request req, Response res) {
// some stuff
return json.toString();
}
如果// some stuff
抛出异常,控制台中不会显示任何内容。但是,如果我明确捕获并打印异常,它会按预期将其打印到控制台。
private String lookup(Request req, Response res) {
try {
// some stuff
} catch(Exception e) {e.printStackTrace();}
return json.toString();
}
这让我相信在路由调用堆栈的更上层某处,所有异常都被捕获并隐藏了。
如您所想,此行为会导致一些相当令人沮丧的调试。有什么方法可以使所有异常始终显示在控制台中吗?
在您的 Main class 中,在任何路由之前添加:
exception(Exception.class, (exception, request, response) -> {
exception.printStackTrace();
});
任何未被您的应用程序代码捕获的异常现在都将转储到控制台。
(IMO Spark 应该默认执行此操作...)