SpringBootヒント:統一例外処理
シナリオ説明
インタフェースの定義については、我々は通常のような固定フォーマットを持っています:
しかし、ときに、呼び出し元のリクエスト当社のAPIインタフェースアドレスが間違っに、それは404エラーを与え、およびデータ・フォーマットの私達の定義は異なるでしょう。
また、当社独自のフォーマットが、あなたはどちらか一方しかできないことを例外ハンドラクラスを定義する必要があるときにエラーが発生したようなシステムに戻ることができるようにする必要があり、統一フォーマットへの復帰は、することができ、レコード例外ログを統一します。
方法
我々は@ExceptionHandler(値= Exception.class)例外処理とそのサブクラスの異常を示しています。例外が発生した場合、エンティティクラスを形成し、それがうまくパッケージ、呼び出し元に返されます返品をJsonResponse。
@ControllerAdvice パブリッククラスGlobalExceptionHandler { プライベートロガーロガー= LoggerFactory.getLogger(GlobalExceptionHandler.class)。 @ExceptionHandler(値= Exception.class) @ResponseBody 公共JsonResponse defaultErrorHandler(HttpServletRequestのリクエスト、HttpServletResponseの応答、例外e){ logger.error( ""、e)前記 JsonResponse jsonResponse =新しいJsonResponse(); jsonResponse.setMsg(e.getMessage())。 とき// [!]の治療だけでは異常動作 (のRuntimeExceptionのinstanceof e)の場合 jsonResponse.setStatus(500)。 他 jsonResponse.setStatus(502)。 jsonResponse.setData(NULL)。 jsonResponseを返します。 } }
データ
@ControllerAdvice
スプリットオープンControllerAdviceコントローラのアドバイス、あるアドバイスの時間について言及したが、我々はポイントとロジックに必要な織りの面を含むすべての属性を、囲むためのセクションであるフロント春Aopとを、説明します。ここでContrllerAdviceも理解することができ、それは「スライス」サラウンド用コントローラの抽象化のレベルであるべきであり、特定のビジネス織りの方法は、達成するために他の注釈を組み合わせています。@ControllerAdvice注釈は、3つの主要ポイントを使用した、クラスで宣言されています。
- 、注釈型@ExceptionHandlerを結合させる方法ので、例外処理の異なるタイプの違いを達成するために、コントローラをスローされた例外の特定のタイプを捕捉します。
- @InitBinder注釈型接着方法、分析方法のパラメータのカスタムを登録するための要求は、そのように指定されたカスタム・フォーマット・パラメータを達成するために、
- ターゲットコントローラのメソッドが実行される前に、その表現が実行されるマーク組み合わせる方法タイプ注釈@ModelAttribute、。
参考リンク
- https://blog.csdn.net/zxfryp909012366/article/details/82955259
- https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/ExceptionHandler.html
- https://blog.csdn.net/kinginblue/article/details/70186586