2017-02-19 4 views
0

私はSparkJavaを使用しています。明示的にキャッチしない限り、ルートにスローされた例外がコンソールに表示されないようです。例えば明示的にキャッチされない限り、例外がコンソールに表示されない

// some stuffが例外をスローした場合、

Spark.post("/lookup", this::lookup); 

private String lookup(Request req, Response res) { 
    // some stuff 
    return json.toString(); 
} 

与えられ、何もコンソールに表示されません。しかし、明示的に例外をキャッチして印刷すると、期待通りにコンソールに出力されます。

private String lookup(Request req, Response res) { 
    try { 
    // some stuff 
    } catch(Exception e) {e.printStackTrace();} 
    return json.toString(); 
} 

これはどこかに、さらにルートコールスタック内まで、すべての例外がキャッチされ、隠されていると信じて私をリード。

あなたが想像しているように、この動作の結果、かなりイライラするデバッグが発生します。すべての例外が常にコンソールに表示されるようにする方法はありますか?自分のメインクラスで

+0

が – Carcigenicate

+0

あなたが心の中で特定のリンクを持っていますか「の例外を嚥下するJavaスパーク」を検索してください? – misaka

+0

いいえ、私が知っているのは、ライブラリが例外を呑み込むのは珍しいことではないことです。たとえば、私はQuilライブラリ(Clojure用)を使用していますが、私はSparkJavaを使用したことはありませんが、これが例外を飲み込んでいる場合は、設定がある可能性があります。 。 – Carcigenicate

答えて

2

、任意のルートの前に、これを追加します。

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

そうでない場合は、アプリケーションコードによって捕捉されない任意の例外は、現在のコンソールにダンプされます。

(デフォルトでこれを行う必要がありIMOスパーク...)

+0

ありがとうございました!私は、例外をキャッチしたラッパークラスのすべてのルートを張っている醜い解決策に目を向けました;これはもっとうまく見えます。 – misaka

関連する問題