JAVA循环防崩溃,java 異常處理(防止因為異常導致系統崩潰)

前言:異常大體分成兩種:已知異常、未知異常

一、已知異常:

例如:用戶名或密碼錯誤,導致的登陸異常

二、未知異常:

例如:,輸入框限制只能輸入number, 但輸入了文字、導致的數據類型錯誤,還有空指針、數組越界 等等。通常這些錯誤我們如果沒考慮到就可能會導致系統崩潰、無法繼續執行。

如何處理:

例如用戶登陸,我們利用AOP(面向切面),判斷用戶名、密碼是否正確

1、聲明狀態碼:

public class StatusCode(){

public final static String BUSS_NO_LOGIN = "10101";//未登錄

public final static String DEAL_FAIL_MSG_NO_LOGINID = "00202";// 沒有登錄賬號或密碼

public final static String DEAL_FAIL_MSG_PASS_ERR = "00203"; // 密碼錯誤

}

2、自定義異常信息(已知異常)

/**

* PFT通用型異常

* @author Administrator

*

*/

public class PFTException extends RuntimeException {

private static final long serialVersionUID = -1977245837696067325L;

private String statusCode;

public PFTException(String message) {

super(message);

}

public PFTException(String message, Throwable cause) {

super(message, cause);

}

public PFTException(String statusCode, String message) {

super(message);

this.statusCode=statusCode;

}

public PFTException(String statusCode, String message, Throwable cause) {

super(message,cause);

this.statusCode=statusCode;

}

public String getStatusCode() {

return statusCode;

}

public void setStatusCode(String statusCode) {

this.statusCode = statusCode;

}

public static PFTException build(String statusCode){

return new PFTException(statusCode, StatusCode.getErrorMessage(statusCode));

}

}

3、利用aop我們對用戶每次對后台的請求進行驗證,如果用戶名密碼不存在或過期拋出 PFTException

/**

* 檢查是否已經登錄,未登錄時拋出

*/

public void checkLogin() {

if (getCurrentUser()==null){

throw PFTException.build(StatusCode.BUSS_NO_LOGIN);

}

}

4、我們已經把異常拋出了,還沒有進行處理,我們可以在Controller 這一層統一進行處理

①、這里我們也以寫一個基類、來處理異常,其他Controller繼承該類

②、我們需要借用Spring注解 :@ExceptionHandler :統一處理某一類異常,從而能夠減少代碼重復率和復雜度

public class BaseController {

private static Logger logger = LoggerFactory

.getLogger(BaseController.class);

/**

* 處理service層拋出的異常

*

* @param

*/

@ExceptionHandler(PFTException.class) //這里是處理我們自定義的異常

@ResponseBody

public WebStoreBean handlerServiceException(

PFTException pftException) {

logger.error("發生了{}類型的異常,異常信息為:{}",

pftException.getClass(),

pftException.getMessage());

return WebStoreBean.fail(pftException.getStatusCode());

}

/**

* 處理未知異常

*

* @param exception

* @return

*/

@ExceptionHandler(Exception.class)

@ResponseBody

public WebStoreBean handlerException(Exception exception) {

logger.error("發生了{}類型的異常,異常信息為:{}", exception.getClass(),

exception.getMessage());

return WebStoreBean.unknown(exception.getMessage());

}

public String escapeURI(String s){

try {

return java.net.URLDecoder.decode(s,"UTF-8");

} catch (UnsupportedEncodingException e) {

return null;

}

}

}

這樣,發生異常信息后,將由BaseController來統一處理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值