【一】springboot整合swagger(超详细
【二】springboot整合swagger(自定义)(超详细)
【三】springboot整合token(超详细)
【四】springboot整合mybatis-plus(超详细)(上)
【五】springboot整合mybatis-plus(超详细)(下)
【六】springboot整合自定义全局异常处理
【七】springboot整合redis(超详细)
【八】springboot整合AOP实现日志操作(超详细)
【九】springboot整合定时任务(超详细)
【十】springboot整合redis实现启动服务即将热点数据保存在全局以及redis(超详细)
【十一】springboot整合quartz实现定时任务优化(超详细)
【十二】springboot整合线程池解决高并发(超详细,保你理解)
【十三】springboot整合异步调用并获取返回值(超详细)
【十四】springboot整合WebService(超详细)
【十五】springboot整合WebService(关于传参数)(超详细)
【十六】springboot整合WebSocket(超详细)
【十七】springboot整合WebSocket实现聊天室(超详细)
【十八】springboot实现自定义全局异常处理
【十九】springboot整合ElasticSearch实战(万字篇)
【二十】springboot整合过滤器实战
【二十一】springboot整合拦截器实战并对比过滤器
【二十二】springboot整合activiti7(1) 实战演示篇
【二十三】springboot整合spring事务详解以及实战
【二十四】springboot使用EasyExcel和线程池实现多线程导入Excel数据
【二十五】springboot整合jedis和redisson布隆过滤器处理缓存穿透
【二十六】springboot实现多线程事务处理_springboot多线程事务
【二十七】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
java程序中,异常有很多种,所有异常的父类都是Throwable类,其中Exception异常是可以进行手动处理的,在程序运行过程中,也会出现各种业务异常,需要自定义,可能返回500,404,等等,前端拿到这些异常可能不方便处理,如果可以统一一个全局异常,是什么错误就返回什么信息和code码给前端,前端更便于处理。
因此下面讲讲如何实现全局异常处理。
qq交流群导航——>231378628
目录
一、分析
二、创建所需类
三、演示效果
首先,实现全局异常的一个大概流程,我认为可以这样处理:
从图中可以看到,实现全局异常会需要这样几个类:
下面会根据这几个类一一创建并最终测试效果。
第一步:为了代码解耦,创建一个接口类出来,定义自定义接口所需要的方法,如下:
第二步:定义一个枚举类,实现上述接口,重写上述接口的两个方法来操作这个枚举类内部的各个具体枚举值,如下:
后续方便管理所有错误枚举的错误信息以及code码,通过构造方法传入code值和message或者直接传入一个枚举值都行。
第三步:自定义一个异常类,就像空指针异常类、IO流异常类一样。此处自定义的异常类属于异常类,所有肯定是要继承一个异常类的,此处需要继承RuntimeException,原因如下:
RuntimeException相比Exception来讲,他是在程序运行时才会爆出异常,在编译时是不会出现异常的,这就表示,如果你throw了一个RuntimeException,不需要做额外操作;而throw一个Exception,程序会要求你try-catch,否则你根本启动不了程序,程序会提示(必须对其进行捕获或声明以便抛出)。如下所示:
自定义一个构造方法,传入上面定义的枚举类,类似空指针异常类的写法:
第四步: 自定义异常处理类,如下:
@RestControllerAdvice注解是@ResponseBody和@ControllerAdvice的组合。
@ExceptionHandler注解统一处理某一类异常,从而能够减少代码重复率和复杂度,value值为什么异常类型,就处理什么异常类型的逻辑。
第五步:如上图方法上使用的方法返回值类BaseResponse类和RespGenerator类都是属于规范方法返回值结构体的类,也有利于一致化后端所有接口的返回结构,方便前端读取所需要的数据。
代码如下:
1、BaseResponse类:
2、RespGenerator类:
新建一个测试controller。
1、测试自定义异常全局处理效果,如下所示:
从代码中可以看到,若username没有传值,会抛出自定义异常,用postman测试,结果如下:
按照代码走向,肯定会报空指针,postman调用结果:
他也成功走了HandlerException注释的方法里面的逻辑处理,如下:
-————————————————————完毕————————————————————