まず、アプリケーションのシナリオ
プログラムエラーが発生した場合、我々は、ページに直接「404」を返すようにしたい「500」およびその他の情報については、ユーザーエクスペリエンスを向上するために、我々は例外、優しいヒント統一ハンドルを必要としません!
第二に、故障分類
(1)統一例外処理:推奨限り異常リターンが統一として結果。
(2)特別な例外処理:珍しいアイテムへの正確な位置決めがないため、一般的に使用されていません。
(3)独自の例外処理:独自の例外を作成、実装は手動コール(TRY ...キャッチ)する必要が実行され、結果を返します!
第三に、実装コード
異常なAOP(アスペクト指向プログラミング)の基礎となる原理を実現する、それは特定の機能を達成するために元のコードを変更しません。
<フォントの色=赤>注:例外処理を扱う優先順位の特別な例外が均一でより高いです!</ FONT>
/**
* @BelongProjecet: guli-framework-parent
* @BelongPackage: com.guliedu.eduservice.handler
* @ClassName: GlobalExceptionHandler
* @Description: 【推荐>方式一】统一异常处理:只要出现异常,返回统一结果
* 【方式二】特殊异常处理:如果出现ArithmeticException异常,才会处理
* 特殊异常处理>统一异常处理(优先级)
* 【推荐>方式三】自定义异常处理:自己创建异常,自己实现返回结果
* @Copyright: 2019-xxx-Powered by 研发四部
* @Author: LinHong
* @CreateDate: 2019/11/13 20:42
* @Version: V1.0
*/
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 功能描述
*
* @MethodName:
* @MethodParam:
* @Return:
* @Description: 处理全局异常的方法
* @Author: LinHong
* @CreateDate: 2019/11/13 20:47
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public R error(Exception e) {
e.printStackTrace();
return R.error().message("执行了全局异常处理方法......");
}
/**
* 功能描述
*
* @MethodName: error
* @MethodParam: [e]
* @Return: com.guliedu.common.R
* @Description: 处理特殊异常的方法
* @Author: LinHong
* @CreateDate: 2019/11/13 20:52
*/
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public R error(ArithmeticException e) {
e.printStackTrace();
return R.error().message("执行了特殊异常处理方法......");
}
/**
* 功能描述
* @MethodName: error
* @MethodParam: [e]
* @Return: com.guliedu.common.R
* @Description: 自定义异常--需要手动抛出异常!!!
* @Author: LinHong
* @CreateDate: 2019/11/14 10:05
*/
@ExceptionHandler(EduException.class)
@ResponseBody
public R error(EduException e) {
// EduException e1 = new EduException(20001,"自定义异常测试,操作失败......";
e.printStackTrace();
return R.error().code(e.getCode()).message(e.getMsg());
}
}
EduExceptionカスタム例外クラス
返されたステータスコード情報:二つの属性を追加するためのランタイム例外クラスの継承、。
/**
* @BelongProjecet: guli-framework-parent
* @BelongPackage: com.guliedu.eduservice.handler
* @ClassName: EduException
* @Description: 自定义异常
* @Copyright: 2019-xxx-Powered by 研发四部
* @Author: LinHong
* @CreateDate: 2019/11/14 9:58
* @Version: V1.0
*/
@Data
//无参构造
@NoArgsConstructor
//有参构造
@AllArgsConstructor
public class EduException extends RuntimeException{
//状态码
private Integer code;
//返回信息
private String msg;
}
(カスタム異常試験)異常な位置
注:カスタム例外を手動で呼び出す必要があり、実行されます!
/**
*测试特殊异常 ArithmeticException
*/
try {
int i =666/0;
} catch (Exception e) {
//抛出自定义异常
throw new EduException(20001,"自定义异常测试,执行此操作.......");
}
Rリターン結果クラス(添付)
/**
* @BelongProjecet: guli-framework-parent
* @BelongPackage: com.guliedu.common
* @ClassName: R
* @Description: 返回结果类--链式编程
* @Copyright: 2019-xxx-Powered by 研发四部
* @Author: LinHong
* @CreateDate: 2019/11/13 14:32
* @Version: V1.0
*/
@Data
public class R {
private boolean success;
private Integer code;
private String message;
private Map<String, Object> data = new HashMap<>();
//构造方法私有化
private R(){}
//对外提供可以访问方法
public static R ok(){
R r = new R();
r.setSuccess(true);
r.setCode(ResultCode.OK);
r.setMessage("成功");
return r;
}
public static R error(){
R r = new R();
r.setSuccess(false);
r.setCode(ResultCode.ERROR);
r.setMessage("失败");
return r;
}
public R message(String message){
this.setMessage(message);
return this;
}
public R code(Integer code){
this.setCode(code);
return this;
}
public R data(String key, Object value){
this.data.put(key, value);
return this;
}
public R data(Map<String, Object> map){
this.setData(map);
return this;
}
}
ResultCodeのデータインタフェースステータスコード(付属)
package com.guliedu.common;
/**
* @BelongProjecet: guli-framework-parent
* @BelongPackage: com.guliedu.common
* @ClassName: ResultCode
* @Description: 编写统一结果返回,创建公共模块--定义返回数据状态码
* @Copyright: 2019-xxx-Powered by 研发四部
* @Author: LinHong
* @CreateDate: 2019/11/13 14:20
* @Version: V1.0
*/
public interface ResultCode {
//成功
int OK = 20000;
//失败
int ERROR =20001;
//用户名或密码错误
int LOGIN_ERROR =20002;
//权限不足
int ACCEAA_ERRORR=20003;
//远程调用失败
int REMOTE_ERROR = 20004;
//重复操作
int REPEAT_ERROR = 20005;
}
♚学習、実践的な要約、株式、メーク生活より良いです!
☞リンダ夏CSDNブログ:https://coding0110lin.blog.csdn.net/ 技術交流を探るために、転載を歓迎します!