異常な統一された治療法:springbootでプロジェクトを設定し、リターンJSONデータは、例えば、個人情報10のユーザIDを照会するインタフェースが必要です。クエリは、ユーザーID 20であり、このユーザーが存在しない場合、我々は情報との友好の契約に戻す必要があります。その後、カスタム例外、この例外がスローされた結果ではないクエリを記述し、例外で生成された情報の原因を追加することができます。
プロジェクトのディレクトリ構造を作成し、次のとおりです。
ユーザ基本情報返されたIDに係るコード制御層、唯一の方法で初見、。
@Controller パブリック クラスUserControllerで{ @Autowired プライベートUserServiceのUserServiceの。 (@GetMapping "/ユーザ" ) 公衆 ResponseEntityのgetUser(@Param( "ID")、整数ID)がスロー例外{ 文字列結果 = userService.getUser(ID)を、 リターン ResponseEntity.ok(新しい ResultData <文字列> (結果)); } }
どのサービス層のメソッドを呼び出します。コードの表示サービス層。
@Service パブリック クラスUserServiceの{ パブリック文字列のgetUser(整数ID){ ストリングユーザー = NULL ; // シミュレーションデータベースクエリ IF(ID == 10 ){ ユーザー = ":トム;年齢12である名前" ; } //は、クエリか否かを判断しますクエリ結果は、例外がスローされるにはない IF(ユーザー== nullの){ スロー 新しい新 MyException(「505」、「レコードを見つけることができません」); } // 戻り結果の 戻りユーザー; } }
データベース検索からDAO層サービスコールデータ、ここで少しロジックを簡素化し、データベースからデータをチェックしませんでした。
異常MyExceptionは、定義の内容を表示するので、ここでは、カスタム例外をスロー:
パブリック クラス MyExceptionは延びのRuntimeException { プライベート文字列のコードと、 プライベート文字列のMSG。 公共MyException(文字コード、文字列MSG){ この .CODE = コード。 この .MSG = MSG; } }
RuntimeExceptionが継承され、2つのプロパティ値を追加しました。
次のようにプロジェクトを実行し、ユーザID 20に関する情報を表示し、明らかに、この時点でプロジェクトは、データを返さないです。
{ "タイムスタンプ": "2019-11-02T09:13:56.919 + 0000"、 "状態" 500、 "エラー": "内部サーバーエラー"、 "メッセージ": "なしメッセージ"、 "パス": " /ユーザ」 }
このようなデータが確実に返される問題は、そのような問題は、私たちのカスタム例外MyException処理されないspringmvc建てインターセプタであり、あなたはMyException処理ロジックの外観をカスタマイズする必要があります。
次のようにMyControllerAdviceクラス、プラス@ControllerAdviceノートを追加し、その中核的なコンテンツは以下のとおりです。
@ResponseBody @ControllerAdvice パブリック クラスMyControllerAdvice { @ExceptionHandler(例外。クラス) パブリックマップの<string、オブジェクト> errorHandleに(例外e){ マップの<string、オブジェクト>マップ= 新しいハッシュマップの<string、オブジェクト> (); map.put( "コード"、-1 ); map.put( "MSG" 、e.getMessage()); リターンマップ。 } @ExceptionHandler(値 = MyException。クラス) パブリックマップの<string、オブジェクト> errorHandleに(MyException電子){ 地図<文字列、OBJECT>マップ= 新しいハッシュマップの<string、オブジェクト> (); map.put( "コード" 、e.getCode())。 map.put( "MSG" 、e.getMsg()); リターンマップ。 } }
第1の方法は、プロセス一般例外例外であるこのクラスは2つのメソッドがあり、この方法はなしであってもよいです。第二の方法は、私たちの習慣で例外を処理することです。地図異常復帰に格納された情報にアクセスします。