2017-02-19 39 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