2017-02-19 40 views
0

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

这使我相信,在路由调用堆栈的更深处,所有异常都会被捕获和隐藏。

正如你可以想象的,这种行为导致一些相当令人沮丧的调试。有什么办法可以让所有的异常总是显示在控制台中?

+0

尝试搜索“Java的火花吞咽异常” – Carcigenicate

+0

你心里有一个特定的链接?我尝试过搜索,但找不到任何东西(也许我只是一个糟糕的搜索者:() – misaka

+0

不,我只知道图书馆吞并异常并不罕见,例如,我使用Quil库(用于Clojure) ,并且默认情况下它会吞下所有的异常,但是它有一个选项,但是我们从来没有使用过SparkJava,但是如果这是吞咽异常,它可能会有一个设置,对不起,我无法提供更多帮助 – Carcigenicate

回答

2

在主类中,任何路线之前,补充一点:

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

任何例外的应用程序代码没有抓到,否则现在将转储到控制台。

(IMO星火应该默认这样做......)

+0

非常感谢你!我已经转向了一个把我的所有路线都加入到包装类中的丑陋解决方案,这个解决方案抓住了任何异常,这看起来好多了,绝对认为这应该是默认的。 – misaka