学习目标:

java中的异常和错误


学习内容:

  1. 首页要了解什么是异常什么是错误
  2. 捕捉全局异常
  3. 自定义异常

一、java中异常和错误的区别

Error类和Exception类的父类都是throwable类: 他们的区别是:

  1. Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
  2. Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

常见的异常 :
ArrayIndexOutOfBoundsException 数组下标越界异常,
ArithmaticException 算数异常 如除数为零
NullPointerException 空指针异常
IllegalArgumentException 不合法参数异常

直接上代码

public class exception {public static void main(String[] args) {exception01();}public static void exception01(){int i =1/0;}
}

结果是:算数异常,如果直接让用户看见异常信息不友好

改造一下写法:把异常捕获,这样就不会看见异常信息,这里写的有些问题 不应该写Execption,这个异常都所有异常的父类,应该写对应的异常,算数异常是 arithmeticExecption

真正的项目里发生异常该怎么捕获呢?下面就来了解一下全局异常,创建springboot项目
1.创建一个controller包,里面写了一个异常方法,
2.配置swagger-ui来进行接口的访问

 @GetMapping("exception")public R exception(){throw new RuntimeException("运行异常");
}

结果肯定是报错,但是这个异常是可以人工干预的,避免控制台输出报错信息,或者把报错解释的详细一点

创建一个MyExceptionHandler类,这个类就是来帮我们捕获全局异常的类,
1.在这个类上加上@RestControllerAdvice注解
2.创建一个方法
3.在方法上加上@ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法 专门处理该类异常,比如这样:,

@RestControllerAdvice
@Slf4j
public class MyExceptionHandler {@ExceptionHandler(value = Exception.class)public String exceptionHandler(Exception e){log.error("未知异常!原因是:"+e.getMessage());return "未知错误!!!";}}

继续访问异常的接口,没有报错了,返回的结果也我定义的数据

控制台也输出异常信息

到这异常的捕获就完成了,但是我们捕获都是系统自带的异常,我就在想能不能自定义异常,然后进行捕获,开干

实现步骤:

  1. 创建一个枚举进行异常传递
  2. 创建一个自定义的异常类取名叫CustomException,
  3. 在MyExceptionHandler全局异常中把自定义异常捕获

枚举

@Getter
@AllArgsConstructor
public enum RCode {SUCCESS(0,"操作成功!"),fail(1,"操作失败!"),AUTH_ERROR(40411,"用户名或密码不存在!"),NO_AUTH_ERROR(40412,"无权访问!"),SYS_VALID_ERROR(501,"参数校验错误"),SYS_EXCEPTION(2,"模拟异常"),INVALID_TOKEN(40410,"Token无效,您无权访问该接口"),
;private Integer code;private String msg;}

CustomException类

@Getter
public class CustomException extends RuntimeException{private RCode rCode;public CustomException(RCode rCode) {this.rCode = rCode;}public CustomException(Throwable cause, RCode rCode) {super(cause);this.rCode = rCode;}
}

在全局异常类中捕获

@RestControllerAdvice
@Slf4j
public class MyExceptionHandler {//捕获自定义异常@ExceptionHandler(value = CustomException.class)public R CustomerExceptionHandler(CustomException e){log.error("未知异常!原因是:"+e.getRCode().getMsg());return R.error(e.getRCode());}}

进行测试:首页修改controller中接口抛出的异常 换成我们自己定义的异常类

进行测试:结果

控制台:

总结:以上就是我个人对全局异常的理解以及实现,因为本人也在学习的过程中慢慢探索的,肯定有很多地方不完美有问题或者解释的不清楚希望多理解也帮忙指出问题所在,

springboot怎么捕获全局异常相关推荐

  1. 一头扎进springboot之捕获全局异常

    我们在写项目的过程中,遇到各种各样的异常都是很常见的,但是作为开发人员,是肯定不能将程序的异常暴露给用户的,我们需要对其进行友好提示,那么在springboot中,我们可以使用注解,在一个类中,把一些 ...

  2. Springboot捕获全局异常:MethodArgumentNotValidException

    Springboot捕获全局异常:MethodArgumentNotValidException 控制器 方法上添加@Valid注解 @PostMapping("/update") ...

  3. Eclipse搭建springboot项目(六)全局异常

    Eclipse搭建springboot项目(六)全局异常 知识点: 1.SpringBoot2.x服务端异常和SpringBoot配置全局异常 1).默认异常测试 int i = 1/0,不友好 2) ...

  4. PHP 捕获全局异常

    PHP 捕获全局异常 参考文章: (1)PHP 捕获全局异常 (2)https://www.cnblogs.com/yaomao/p/11260388.html (3)https://www.java ...

  5. SpringBoot中定义全局异常处理器

    场景 SpringBoot中创建全局异常处理器,使发生异常时能处理. 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/356 ...

  6. express捕获全局异常的三种方法

    express捕获全局异常的三种方法 参考文章: (1)express捕获全局异常的三种方法 (2)https://www.cnblogs.com/chenqionghe/p/11349521.htm ...

  7. android捕获全局异常,并对异常做出处理

    2019独角兽企业重金招聘Python工程师标准>>> 在做项目时,经常会把错误利用异常抛出去,这样在开发时就可以通过手机抛的异常排查错误,很方便.但是当程序开发完毕,版本稳定,需要 ...

  8. 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常

    毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里.所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命.下面我们主要讨论的是如 ...

  9. python捕获全局异常统一管理_python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中...

    使用sys.excepthook函数进行全局异常的获取. 1. 使用MessageDialog实现异常显示: 2. 使用logger把捕获的异常信息输出到日志中: 步骤:定义异常处理函数, 并使用该函 ...

最新文章

  1. 成功爬取CVE-2019-9766漏洞复现【CSDN】【1】
  2. 仿FLASH动感十足鼠标滑过放大的菜单代码
  3. vsftpd实现的FTP服务
  4. mysql当数据改变时_当数据库里面的价格变化时,发送信息到企业微信中
  5. linux 内存泄露工具,linux下检查内存泄露的工具--mtrace
  6. php页头滚动文字公告,jQuery公告栏文字滚动插件
  7. IO 密集型服务 性能优化实战记录
  8. InstallShield 常用常量
  9. 反积分饱和 程序_用抗积分饱和PID控制传递函数为G(s)的被控对象
  10. java两种异常_JAVA两种异常的区别 (转)
  11. 为什么grab显示无法定位_西门子SIPARTPS2阀门定位器的故障处理
  12. java基于ssm人体健康体检信息管理系统-springboot
  13. 时间序列——季节系数法
  14. Pycharm 去掉拼音检查,大小写检查,自动补全不区分大小写
  15. 三月月赛 1005 wuli通通和doge(细节处理)
  16. 现在买基金的人很多,我用Python写了个快速追踪基金的收益情况!所以说没有它做不了的事!
  17. 怎样恢复误删计算机管理员,win10管理员账号误删只有普通权限怎么恢复
  18. 有趣的23000----整理(07)A词根
  19. 在iPhone上使用3D Touch
  20. 推荐一个牛逼的直播开源项目

热门文章

  1. 干货 | 答编辑/审稿人问之样本量大关
  2. redis 学习看这个网站就够了
  3. sheet.range(‘U‘ + str(index - 1), ‘U‘ + str(index)).api.merge(),xlwings合并Excel上下相邻单元格,代码中断执行,也不报错。
  4. ipv6nginx错误
  5. 完成任务≠结果心得交流
  6. 接口测试平台代码实现40:修改bug
  7. 在昏暗的灯光下看书有损视力
  8. HIT Online Judge1006 - Weird Clock
  9. 【arduino】串口通信
  10. SpaceVim踩坑之java代码格式化