-
創建自定義異常類,繼承RuntimeException
public class MyException extends RuntimeException {
private int code; //異常狀態碼
private String message; //異常信息
private String descinfo; //描述
/**
* @param code 狀態
* @param message 信息
* @param descinfo 錯誤,描述!
*/
public MyException(int code, String message,String descinfo) {
this.code = code;
this.message = message;
this.descinfo = descinfo;
}
public MyException() {
}
public String getDescinfo() {
return descinfo;
}
public void setDescinfo(String descinfo) {
this.descinfo = descinfo;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
-
創建ControllerAdvice 使用boot為我們提供的@ControllerAdvice注解和@ExceptionHandler來實現對全局異常的捕抓 返回信息為json
@ControllerAdvice //控制器增強 配合ExceptionHandler實現全局捕抓異常
@Slf4j
public class MyControllerAdvice {
@ExceptionHandler(value = MyException.class)
@ResponseBody
public Map exceptionHandler(MyException me) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("code",me.getCode());
map.put("message",me.getMessage());
//打印日志信息
log.info("捕抓到異常信息->>"+me.getDescinfo());
return map;
}
-
使用自定義注解
Map<String, Object> map = new HashMap<>();
UsernamePasswordToken token = new UsernamePasswordToken(name,password);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
map.put("code",0);
map.put("message","登錄成功!");
return map;
} catch (UnknownAccountException e) {//用戶名不存在
throw new MyException(-1,"用戶名不存在!","用戶名不存在");
}catch (IncorrectCredentialsException e) {//賬號或者密碼不正確
throw new MyException(-1,"賬號或密碼錯誤!","賬號或者密碼不正確");
}catch (LockedAccountException e) {//限制登錄
throw new MyException(-1,"該賬號已經被限制登錄請聯系管理員!","該賬號已經限制登錄了!");
}catch (Exception e) {
throw new MyException(-1,"未知異常","登錄出現了異常->>"+e.getMessage());
}
這樣就完成了自定義異常的處理 自己動動手試試吧 >_<