Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 869|回复: 0

java 异常处理(防止因为异常导致系统崩溃)

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-2 21:04:31 | 显示全部楼层 |阅读模式

    前言:异常大体分成两种:已知异常、未知异常

    一、已知异常:

          例如:用户名或密码错误,导致的登陆异常

    二、未知异常:

          例如:,输入框限制只能输入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来统一处理
     
    




        

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-1 12:54 , Processed in 0.057181 second(s), 28 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表