springboot +異常な統一された治療

「純粋なオンラインバンキングのフレームワーク」の「Webの要求に例外をスローし、例外処理コードは、統一された取得プロセスをキャプチャしません。

同じことがでSpingbootに適用されます。(以下のコードは、フロントが例外をスローspringboot、結果から同じにSpringMVCコード、キャプチャを統一するであろう。以下に記述された具体的な処理ロジックとしてフロントに向けられているJSP、おかげspringboot +のVUEのモードであります背景ページをジャンプすることはできませんので、処理ロジックは適用されません)

しかし、ここで良い取引をキャプチャする例外統一された方法は、将来の拡張を開発するために、アーカイブを残します

パッケージcom.nsoft.gkzp.syscore.config。


インポートにjava.io.IOException;
インポートのjava.io.Writer;

インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse;

輸入com.nsoft.gkzp.syscore.web.ControllerException。
輸入com.nsoft.gkzp.syscore.web.UserContext;
輸入org.apache.logging.log4j.LogManager。
輸入org.springframework.context.annotation.Configuration。
輸入org.springframework.web.servlet.HandlerExceptionResolver;
輸入org.springframework.web.servlet.ModelAndView。
輸入org.springframework.web.util.WebUtils。

/ **
 *
 異常なプロセスのための* Web要求
 *
 * @author zdyang
 * @date 2019年8月29日
 *
 * /
@設定
パブリック クラス WebExceptionResolverは実装HandlerExceptionResolverを{

    最終 プライベート 静的 org.apache.logging.log4j.Loggerロガー= LogManager.getLogger(WebExceptionResolver。クラス);

    @オーバーライド
    公共のModelAndView resolveException(HttpServletRequestのarg0に、HttpServletResponseのARG1、オブジェクトARG2、例外ARG3){

        文字列URI = arg0.getRequestURI()toLowerCaseメソッド()。
        UserContext userContext =(UserContext)WebUtils.getSessionAttribute(arg0に、 "userContext" )。

        IF(uri.lastIndexOf( "JSON")が> 0){    // .json終了識別データが取得される   // 識別子が.json非終了ページジャンプである

            DataResult dataResult = 新しい新)DataResult(。

            logger.error(arg3.getMessage())。

            もし(ARG3 のinstanceof ControllerException == ){
                userContext.setErrorMessage( "異常なシステム:" + arg3.getMessage())。
            }

//             arg1.resetBuffer();
//             arg1.setContentType( "text / htmlの;のcharset = UTF-8");
//             arg1.setHeader(「プラグマ」、「キャッシュなし」)。
//             arg1.setHeader( "のCache-Control"は、 "ノーキャッシュは、-再検証する必要がありません"); 
            ライターライター= nullを

            してみてください{
                ライター = arg1.getWriter();
                writer.write(JSONFactory.toJSONString(dataResult、userContext))。
            } キャッチ(例外e){
                e.printStackTrace();
            } 最後に{
                 しようと{
                    writer.flush();
                    writer.close();
                } キャッチ(IOExceptionを電子){
                    e.printStackTrace();
                }
            }
            リターン ヌル
        } {

            ModelAndViewモデル = 新しいのModelAndView();
            model.setViewName( "error500" );
            オブジェクトerrorPageでは = arg0.getAttribute( "errorPageでは" )。
            logger.error( "******** errorPageでは=" + errorPageでは)。
            もし(errorPageでは!= nullの){

                model.setViewName(errorPage.toString())。

                もし(ARG3 のinstanceof ControllerException){
                    userContext.setErrorMessage(arg3.getMessage())。
                } {
                    userContext.setErrorMessage( "システム異常!" );
                }
            }

            リターンモデル。
            //    } 
        }

    }

}

 

おすすめ

転載: www.cnblogs.com/zdyang/p/11645696.html