Spring MVCアプリで例外ロギングから例外処理に変更する最も簡単な方法は何ですか?

ピーチ:

私のSpring MVCアプリは、次のようなメソッドでいっぱいです。

@RequestMapping(value = "/foo", method = RequestMethod.GET)
public final void foo(HttpServletRequest request, ModelMap modelMap){
    try{
        this.fooService.foo();
    }
    catch (Exception e){
        log.warn(e.getMessage(), e);
    }
}

例外はキャッチされてログに記録されますが、それ以外では処理されません。

上記でfooService呼び出されたものは同じことを行い、例外をコントローラーにスローすることはありませんが、それらをキャッチしてログに記録します。したがって、実際にはこのコントローラー例外コードは呼び出されません。

アプリに適切な例外処理を実装するための最善かつ最も簡単なアプローチは何ですか?

トマシュ・ヌルキェヴィチ:

catch不注意にログを記録するだけの場合は、すべてのステートメントを削除します。catchエラーを非表示にするのではなく、処理するためのものです。

これらすべての漁獲量が削除されると、Spring MVCの中で一つのグローバル例外リゾルバをインストールする(123、...)だけで、この些細なインターフェイスを実装します。

public interface HandlerExceptionResolver {
    ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);
}

例外リゾルバーでは、単に例外をログに記録して、それを未処理(return null)にしておくことweb.xmlができます。これにより、のエラーマッピングが要求を適切なエラーページに転送します。または、自分で例外を処理し、エラーページをレンダリングすることもできます。最も単純なケースでは、登録例外リゾルバは必要ありません@ServiceそれをSpring Beanとして定義し、/で注釈を付けます。

どうすればよいかわかっている場合にのみ、例外をキャッチしてください。ロギングはトラブルシューティングのみを目的としており、何も処理しません。

ところでこれ:

log.warn(e.getMessage(), e);

は例外処理が非常に貧弱であるだけでなく、少し間違っています。例外にメッセージがない場合null、スタックトレースの直前に不思議なメッセージが表示されます含まれている場合、メッセージは2回表示されます(Logbackでテスト済み)。

22:51:23.985 WARN [main][Foo] OMG! - this is the exception message
java.lang.IllegalStateException: OMG! - this is the exception message
    at Foo.bar(Foo.java:20) ~[test-classes/:na]

...特に例外メッセージが非常に長い場合は、望ましくない場合があります。


更新:独自の例外ロガーを作成する場合は、org.springframework.web.servlet.HandlerExceptionResolverおよびの両方の実装を検討してくださいorg.springframework.core.OrderedgetOrder()(のような小さなものを返す必要があり0、あなたのハンドラは組み込みのハンドラよりも優先されるように)。

org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolverハンドラーの前に実行すると、例外をログに記録せずにHTTP 500が返されただけです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Spring Bootで例外を処理する最良の方法は何ですか?

分類Dev

Springで値を持つリストを指定する最も簡単な方法は何ですか?

分類Dev

propが更新されたときに `react.Component`を` react-spring`でアニメーション化する最も簡単な方法は何ですか?

分類Dev

Springプロジェクトで例外を処理する方法は?

分類Dev

プログラムのコンテキストで日時入力に例外処理を追加する最も簡単な方法は何でしょうか?

分類Dev

Springのより簡単な例外処理手法はありますか?

分類Dev

Spring amqpsimpleMessageListenerContainerで例外を処理するための最良の戦略は何ですか

分類Dev

Spring Boot アプリでロギング レベルを動的に変更する

分類Dev

Spring MVCでビューをレンダリングするときにスローされた例外を処理するにはどうすればよいですか?

分類Dev

Springアプリケーションで例外を処理する場所

分類Dev

RESTful Spring MVCコントローラーで検証エラーと例外を処理する方法は?

分類Dev

Spring Bootアプリケーションで外部APIからの大きな応答を処理する方法

分類Dev

AndroidのQtアプリからのロギングをadblogcat出力で確認する最も簡単な方法は何ですか?

分類Dev

Spring MVCでユーザーログインを処理するにはどうすればよいですか?

分類Dev

タグに基づくアイテムの検索を処理するためにSpring JPAを設定する最良の方法は何ですか?

分類Dev

Springセキュリティでセッションがタイムアウトしたときにリクエストで見つかった無効なCSRFトークンを処理するための最良の方法は何ですか

分類Dev

Springで公開されたイベントからの例外を処理する方法

分類Dev

Springのカスタム例外ハンドラーの内部からスローされた例外を処理する方法はありますか?

分類Dev

Spring Transactionで例外処理は必要ですか?

分類Dev

Springで例外を処理するための最良のアプローチと実践?

分類Dev

Spring BootのDeferredResultで例外を処理する方法は?

分類Dev

Spring Bootで例外を処理するアプローチ。例外キャッチをスローして同じ例外をスローする、それは悪い習慣ですか?

分類Dev

Spring Mvcがリクエスト処理に失敗し、nullポインタ例外をスローすると言う理由を誰かに説明してもらえますか

分類Dev

Spring Data RestとPagingAndSortingRepositoryで例外を処理するにはどうすればよいですか?

分類Dev

Spring MVCのリソースバンドルの最良のアプローチは何ですか?

分類Dev

Spring-MVCプロジェクトのエラーを他の方法なしで処理するにはどうすればよいですか?

分類Dev

Spring MVCでカスタマイズされたエラーページを返すことで404例外をグローバルに処理するにはどうすればよいですか?

分類Dev

ファイルをJavascriptプログラムにリンクする最も簡単な方法は何ですか?

分類Dev

ajaxで何らかのアクションにアクセスし、Springアスペクトが例外をスローする場合、特定のページをリダイレクトする方法

Related 関連記事

  1. 1

    Spring Bootで例外を処理する最良の方法は何ですか?

  2. 2

    Springで値を持つリストを指定する最も簡単な方法は何ですか?

  3. 3

    propが更新されたときに `react.Component`を` react-spring`でアニメーション化する最も簡単な方法は何ですか?

  4. 4

    Springプロジェクトで例外を処理する方法は?

  5. 5

    プログラムのコンテキストで日時入力に例外処理を追加する最も簡単な方法は何でしょうか?

  6. 6

    Springのより簡単な例外処理手法はありますか?

  7. 7

    Spring amqpsimpleMessageListenerContainerで例外を処理するための最良の戦略は何ですか

  8. 8

    Spring Boot アプリでロギング レベルを動的に変更する

  9. 9

    Spring MVCでビューをレンダリングするときにスローされた例外を処理するにはどうすればよいですか?

  10. 10

    Springアプリケーションで例外を処理する場所

  11. 11

    RESTful Spring MVCコントローラーで検証エラーと例外を処理する方法は?

  12. 12

    Spring Bootアプリケーションで外部APIからの大きな応答を処理する方法

  13. 13

    AndroidのQtアプリからのロギングをadblogcat出力で確認する最も簡単な方法は何ですか?

  14. 14

    Spring MVCでユーザーログインを処理するにはどうすればよいですか?

  15. 15

    タグに基づくアイテムの検索を処理するためにSpring JPAを設定する最良の方法は何ですか?

  16. 16

    Springセキュリティでセッションがタイムアウトしたときにリクエストで見つかった無効なCSRFトークンを処理するための最良の方法は何ですか

  17. 17

    Springで公開されたイベントからの例外を処理する方法

  18. 18

    Springのカスタム例外ハンドラーの内部からスローされた例外を処理する方法はありますか?

  19. 19

    Spring Transactionで例外処理は必要ですか?

  20. 20

    Springで例外を処理するための最良のアプローチと実践?

  21. 21

    Spring BootのDeferredResultで例外を処理する方法は?

  22. 22

    Spring Bootで例外を処理するアプローチ。例外キャッチをスローして同じ例外をスローする、それは悪い習慣ですか?

  23. 23

    Spring Mvcがリクエスト処理に失敗し、nullポインタ例外をスローすると言う理由を誰かに説明してもらえますか

  24. 24

    Spring Data RestとPagingAndSortingRepositoryで例外を処理するにはどうすればよいですか?

  25. 25

    Spring MVCのリソースバンドルの最良のアプローチは何ですか?

  26. 26

    Spring-MVCプロジェクトのエラーを他の方法なしで処理するにはどうすればよいですか?

  27. 27

    Spring MVCでカスタマイズされたエラーページを返すことで404例外をグローバルに処理するにはどうすればよいですか?

  28. 28

    ファイルをJavascriptプログラムにリンクする最も簡単な方法は何ですか?

  29. 29

    ajaxで何らかのアクションにアクセスし、Springアスペクトが例外をスローする場合、特定のページをリダイレクトする方法

ホットタグ

アーカイブ