Spring MVCのコントローラの通知や例外処理を追加します

  春AOPのように、Spring MVCのコントローラはまた、主に4つの音を伴うの通知に追加することができます:
  グローバルインターセプタコントローラを識別するために、重要な役割に基づいて、•ControllerAdvice @、それはコントロールを対応する適用されますデバイス。
  •@ InitBinder、コントローラパラメータを許可するように設定する場合、いくつかのカスタムコントロールを追加し、許可POJOパラメータを構築する方法です。
  コントローラの例外で登録することができます•@ exceptionHandlerの、コントローラは、例外を登録しているとき、それは法にジャンプします。
  •@ ModelAttributeは、それはコントローラのメソッドで実行するデータモデル、タグ付け方法は、オブジェクトを返すとき、それはデータモデルに保存されるためのコメントです。

  リスト16-19:コントローラの通知

パッケージcom.ssm.chapter15.controller.advice。

// 識別制御部に通知し、対応するパケットを特定します

輸入org.springframework.beans.propertyeditors.CustomDateEditor。
輸入org.springframework.ui.Model。
輸入org.springframework.web.bind.WebDataBinder。
輸入org.springframework.web.bind.annotation.ControllerAdvice。
輸入org.springframework.web.bind.annotation.ExceptionHandler。
輸入org.springframework.web.bind.annotation.InitBinder。
輸入org.springframework.web.bind.annotation.ModelAttribute。

輸入java.text.SimpleDateFormatの。
輸入java.util.Date;

@ControllerAdvice(basePackages = { "com.ssm.chapter15.controller.advice" })
 パブリック クラスCommonControllerAdvice {

    // パラメータに対応するカスタムHTTP処理ルール
    @InitBinder
     公共 ボイドinitBinder(WebDataBinderバインダー)の{
         // クライアントがCustomDateEditorカスタムエディタである、日付タイプをフォーマットするため
         // 空有効にするかどうかを示す、そのブールパラメータ 
        (binder.registerCustomEditorを。DATEのクラス新しい新しい CustomDateEditor(新しい新しいてSimpleDateFormat( "MM-DD-YYYYのHH:MM:SS")、偽に))。
    }

    //は、リターンオブジェクトと、オブジェクトが中に記憶され、データ・モデルを処理
    @ModelAttribute
     公共 ボイドpopulateModel(モデルモデル){
        model.addAttribute( "プロジェクト名"、 "第15章" );
    }

    // 例外処理、制御方法は、例外が発生したとき、同じビューで応答することができる傍受するよう 
    @ExceptionHandler(例外。クラスパブリック文字列例外(){
         戻り「例外」
    }
}

 


  リスト16-20:テストコントローラ通知

パッケージcom.ssm.chapter15.controller.advice。

輸入org.apache.http.client.utils.DateUtils。
輸入org.springframework.format.annotation.NumberFormat。
輸入org.springframework.stereotype.Controller。
輸入org.springframework.ui.Model。
輸入org.springframework.web.bind.annotation.RequestMapping。
輸入org.springframework.web.bind.annotation.ResponseBody。

インポートのjava.math.BigDecimal;
輸入java.util.Date;
輸入java.util.HashMapを;
輸入java.util.Map;

@コントローラ
@RequestMapping( "/アドバイス" のパブリック クラスMyAdviceController {

    / ** 
     * のhttp:// localhostを:?8081 /アドバイス/ test.do日= 2017年6月23日%2018:12:00&量= 123,456.78
     * @Paramの日付、方法は@initBinderバインディング登録フォームを持っています
     * @Param モデルデータモデル、@ ModelAttribute方法は、最初の要求の方法で実行されます
     * @returnのマップ
      * / 
    @RequestMapping( "/テスト" 
    @ResponseBody
    公共の地図<文字列、オブジェクト> testAdvice(日付、@NumberFormat(パターン= "##、###。00" )BigDecimalの量、モデルモデル){
        地図 <文字列、オブジェクト> =、地図新しい新しい HashMapの<文字列、オブジェクト> ();
         // 通知@ModelAttribute注釈方法は、コントローラの前に実行されるので、これはデータに取られるので 
        map.put(「PROJECT_NAME」、モデル。.asMap()( "プロジェクト名" GET ));
         // map.put( "DATE"、DateUtils.format(DATE、 "MM-DD-YYYY")); 
        map.put( "DATE"、DateUtils.formatDate (DATE、 "MM-DD-YYYY" ));
        map.put( "量" 、量);
        リターンマップ。
    }

    / **
     *テストの異常。
     * / 
    @RequestMapping( "/例外" 公共 無効例外(){
         スロー 新新のRuntimeException( "例外ジャンプテスト" );
    }
}

 

  コントローラは、(@Controller注)また、INIT-バインダー、@ exceptionHandlerの、@ ModelAttribute @使用することができます。それは、現在のコントローラに対してのみ有効であることに注意してください

  16-21リスト:テスト@ModelAttribute

パッケージcom.ssm.chapter15.controller。

輸入com.ssm.chapter15.pojo.Role。
輸入org.springframework.beans.factory.annotation.Autowired;
輸入org.springframework.stereotype.Controller。
輸入org.springframework.web.bind.annotation.ModelAttribute。
輸入org.springframework.web.bind.annotation.RequestMapping。
輸入org.springframework.web.bind.annotation.RequestParam。
輸入org.springframework.web.bind.annotation.ResponseBody。

@コントローラ
@RequestMapping(値 = "/ role2の" パブリック クラスRole2Controller {

    // @Autowired
     // プライベートRoleService roleService = NULL;

    / **
     *実行するコントローラメソッドに入る前に、文字オブジェクトデータモデルを保存するために重要な役割として、データベースクエリの役割を開始
     *
     * @param 上記のID番号の役割を
     * @return 角色
      * / 
    @ModelAttribute( "ロール" 公的役割initRole(@RequestParam(値= "ID" =必須)ロングID){
         // 判断ID是否为空
        であれば(ID == NULL || ID <1 ){
             戻り ヌル
        }
        // ロールロール= roleService.getRole(ID); 
        ロールロール= 新しい新しい役割(ID、 "シューター"、 "リモート物理的な出力" );
         戻り値の役割。
    }

    / ** 
     * のhttp:// localhostを:8081 / role2の/ getRoleFromModelAttribute.do ID = 1?
     *
     * @Paramの文字オブジェクトの役割は、データモデルから取得されます
     * @Return ロールオブジェクト
     データモデルから抽出された* @ModelAttributeの注釈データ
     * / 
    @RequestMapping(値 = "getRoleFromModelAttribute" 
    @ResponseBody
    公的役割getRoleFromModelAttribute(@ModelAttribute(「ロール」)の役割の役割){
         返す役割を、
    }
}

 



  表16-2わずか数例外マッピングコードに名前を付けるために、実際より、の定義はorg.springframework.http.HttpStatus列挙クラスのソース見ることができ

  、リスト16-22のコード:カスタム例外を
パッケージcom.ssm.chapter15.exception。

// 春のMVCの例外マッピングを追加し、コードが例外マッピングコードを表し、それは例外の理由を示した理由

輸入org.springframework.http.HttpStatus。
輸入org.springframework.web.bind.annotation.ResponseStatus。

@ResponseStatus(コード = HttpStatus.NOT_FOUND、理由=「例外の役割を見つけることができません!」パブリック クラスを RoleException 延びのRuntimeExceptionを{

    プライベート 静的 最終 長い serialVersionUIDの= 5040949196309781680L 
    
}

 


  SpringMVC例外コードは、コード注釈@ResponseStatusを構成することによりマッピングすることができ、その理由を配置することにより、異常な構成の理由を理解することができます。異常の定義以来、私たちは、例外を使用する必要があります。ほとんどの場合、あなたはJavaが提供する...例外を処理するためのcatch ... finally文を試すことができます。Spring MVCのも、例外を処理する方法を提供します。
  リスト16-23:RoleExceptionが異常な使い方
パッケージcom.ssm.chapter15.controller。

輸入com.ssm.chapter15.exception.RoleException。
輸入com.ssm.chapter15.pojo.Role。
輸入org.springframework.stereotype.Controller。
輸入 org.springframework.web.bind.annotation *。;

@コントローラ
@RequestMapping(値 = "/ roleE" パブリック クラスRoleExceptionController {

    / ** 
     * のhttp:// localhostを:8081 / roleE / notFound.do ID = 1?
     *
     * @paramのID
     * @return 
     * / 
    @RequestMapping( "NOTFOUND" 
    @ResponseBody
    パブリックロールNOTFOUND(ロングID){
         // 役割役割= roleService.getRole(ID); 
        ロールロール= 新しい新しい役割(ID、 "シューター"、 "リモート物理的出力" )。
        役割 = ヌル;
         //はRoleExceptionスロー情報の役割を見つけることができません
        IF(役割== nullの){
             スロー 新しい新しいRoleExceptionを();
        }
        リターン役割。
    }

    // 現在のコントローラRoleException例外が発生し、処理が入る 
    @ExceptionHandler(RoleException クラスパブリック文字列HandleRoleException(RoleException E){
         //は非友好的回避、指定されたページを返す
        リターン「例外」を
    }
}

 



 

おすすめ

転載: www.cnblogs.com/ooo0/p/11141768.html