Springboot +例外処理

1.異常なインタフェースを定義

パブリックインターフェイスのResultCode { 
ブール成功()。
INTコード()。
文字列MSG();
}

2.異常な列挙を定義します

@ToString 
パブリック列挙CommonCodeがResultCodeの{実装

SUCCESS(真、200を、 "!请求成功")、
FAILED(偽、9999、 "请求失败!")、
INVALID_PARAM(9001、偽、 "非法入参!");
ブール成功。
int型のコード。
文字列のMSG。

CommonCode(ブール成功、INTコード、文字列MSG){
this.success =成功。
this.code =コード。
this.msg = MSG;
}
@Override
パブリックブール成功(){
成功を返します。
}
@Override
公共int型のコード(){
戻りコード。
}
@Override
パブリック文字列MSG(){
戻りMSG。
}
}

3.戻り基本データ型

パブリッククラスのResponseResult { 

プライベートブール成功。
プライベートint型のコード。
プライベート文字列メッセージ。
プライベートオブジェクトデータ;

公共のResponseResult(){}

公共のResponseResult(ブール成功、INTコード、文字列メッセージ、オブジェクトデータ){
this.success =成功。
this.code =コード。
this.message =メッセージ。
this.data =データ。
}

公共のResponseResult(のResultCodeのresultCode){
this.success = resultCode.success()。
this.code = resultCode.code()。
this.message = resultCode.msg()。
}
//ゲッターセッター
}

4.カスタム例外

customException延びのRuntimeException {クラス公開
専用のResultCodeのresultCode;
公共getResultCodeのResultCode(){
のresultCodeを返す;
}
公共customException(のResultCodeのresultCode){
//異常情報は異常情報+エラーコード(我々のカスタム例外情報の形式)である
this.resultCode = resultCode;
}
}

変換異常

パブリッククラスExceptionCast { 
公共の静的な無効キャスト(ResultCodeのresultCodeが){
新しいCustomException(のresultCodeを)投げます。
}
}

6.異常な統一された治療

@ControllerAdvice 
パブリッククラスExceptionCatch {
// customException例外捕捉
@ExceptionHandler(CustomException.class)
@ResponseBody
公共のResponseResult customException(customException E){
e.printStackTrace();
のResultCode e.getResultCodeのresultCode =();
ResponseResultを新しい新規のResponseResult RR =(のresultCodeを);
戻りRR;
}

//使用例外保存特性および例外タイプは、エラーコードマッピングImmutableMapは不変であり、一度作成され、スレッドの安全性
//例外エラーコードの種別に対応する地図構成定義
<Throwableを延びプライベート静的ImmutableMap <クラス >? 、ResultCodeの>例外は;
//マップオブジェクトを構築するために、オブジェクトビルダを定義ImmutableMap
静的ImmutableMap.Builder保護<?クラス<たThrowableを拡張>のResultCode>ビルダーImmutableMap.builder =();

//例外の種類を構築するために使用されるビルドエラーコードY例外
@ExceptionHandler(Exception.class)
@ResponseBody
公共のResponseResult例外( E例外){
e.printStackTrace();
IF(EXCEPTIONS == NULL){
EXCEPTIONS = builder.build(); //成功した例外を構築
}
エラーコードはによって発見された場合、例外からのタイプの例外を見つける//ユーザに対応するエラーコードが異常応答9999を見つけることができない場合
のResultCode = EXCEPTIONS.getのresultCode(e.getClass());
IF {(のresultCode = NULL!)
新しい新規のResponseResult(のresultCode)を返す;
}他{
新しい新しいのResponseResult(CommonCodeを返します。 )失敗しました。
}
}

静的{
builder.put(HttpMessageNotReadableException.class、CommonCode.INVALID_PARAM)。
}
}

7.SpringBoot走査開始側カットカスタムクラス

@SpringBootApplication 
@ComponentScan(basePackagesの= { "例外"、 "demo.controller"})
パブリッククラスActivitiApplication {
パブリック静的無効メイン(文字列[] args){
SpringApplication.run(ActivitiApplication.class、引数)。
}
}

おすすめ

転載: www.cnblogs.com/god-monk/p/11461462.html