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来统一处理

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页