春ブーツ:異常な統一された治療

異常な統一された治療法: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つのメソッドがあり、この方法はなしであってもよいです。第二の方法は、私たちの習慣で例外を処理することです。地図異常復帰に格納された情報にアクセスします。

 

おすすめ

転載: www.cnblogs.com/colin220/p/11755304.html