除非明确捕获

时间:2017-02-19 00:12:53

标签: java logging exception-handling spark-java

我正在使用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();
}

这让我相信在路由callstack的某个地方,所有异常都会被捕获和隐藏。

可以想象,这种行为导致一些相当令人沮丧的调试。是否有任何方法可以使所有异常始终显示在控制台中?

1 个答案:

答案 0 :(得分:2)

在您的Main类中,在任何路由之前添加:

    exception(Exception.class, (exception, request, response) -> {
        exception.printStackTrace();
    });

现在,您的应用程序代码未捕获的任何异常都将被转储到控制台。

(IMO Spark默认情况下应该这样做......)