【十八】springboot实现自定义全局异常处理

简介: 【十八】springboot实现自定义全局异常处理


       java程序中,异常有很多种,所有异常的父类都是Throwable类,其中Exception异常是可以进行手动处理的,在程序运行过程中,也会出现各种业务异常,需要自定义,可能返回500,404,等等,前端拿到这些异常可能不方便处理,如果可以统一一个全局异常,是什么错误就返回什么信息和code码给前端,前端更便于处理。

       因此下面讲讲如何实现全局异常处理。


一、分析

首先,实现全局异常的一个大概流程,我认为可以这样处理:

从图中可以看到,实现全局异常会需要这样几个类

  1. 自定义异常接口类
  2. 自定义异常枚举类
  3. 自定义异常类
  4. 自定义异常处理类
  5. 自定义全局响应类

下面会根据这几个类一一创建并最终测试效果。

二、创建所需类

       第一步:为了代码解耦,创建一个接口类出来,定义自定义接口所需要的方法,如下:

       第二步:定义一个枚举类,实现上述接口,重写上述接口的两个方法来操作这个枚举类内部的各个具体枚举值,如下:

       后续方便管理所有错误枚举的错误信息以及code码,通过构造方法传入code值和message或者直接传入一个枚举值都行。

       第三步:自定义一个异常类,就像空指针异常类、IO流异常类一样。此处自定义的异常类属于异常类,所有肯定是要继承一个异常类的,此处需要继承RuntimeException,原因如下:

       RuntimeException相比Exception来讲,他是在程序运行时才会爆出异常,在编译时是不会出现异常的,这就表示,如果你throw了一个RuntimeException,不需要做额外操作;而throw一个Exception,程序会要求你try-catch,否则你根本启动不了程序,程序会提示(必须对其进行捕获或声明以便抛出)。如下所示:

       自定义一个构造方法,传入上面定义的枚举类,类似空指针异常类的写法:

       第四步: 自定义异常处理类,如下:

       @RestControllerAdvice注解是@ResponseBody和@ControllerAdvice的组合。

  • @ResponseBody注解:通常用来将java对象转成JSON对象,返回给前端JSON数据。
  • @ControllerAdvice注解:结合方法型注解@ExceptionHandler,用于捕获Controller中抛出的指定类型的异常,从而达到不同类型的异常区别处理的目的。

        @ExceptionHandler注解统一处理某一类异常,从而能够减少代码重复率和复杂度,value值为什么异常类型,就处理什么异常类型的逻辑。

       第五步:如上图方法上使用的方法返回值类BaseResponse类和RespGenerator类都是属于规范方法返回值结构体的类,也有利于一致化后端所有接口的返回结构,方便前端读取所需要的数据。

  • BaseResponse类:规定返回值结构。
  • RespGenerator类:将逻辑处理后的数据包装转换成BaseResponse类进行返回给前端。

       代码如下:

       1、BaseResponse类:

      2、RespGenerator类:

三、演示效果

       新建一个测试controller。

       1、测试自定义异常全局处理效果,如下所示:

       从代码中可以看到,若username没有传值,会抛出自定义异常,用postman测试,结果如下:

       2、测试空指针异常全局处理效果,如下所示:

       按照代码走向,肯定会报空指针,postman调用结果:

       他也成功走了HandlerException注释的方法里面的逻辑处理,如下:


-————————————————————完毕————————————————————


目录
相关文章
|
6月前
|
JSON Java 数据格式
Springboot自定义全局异常处理
BasicErrorController是Spring Boot中默认提供的用于处理基本错误的控制器。它实现了ErrorController接口,用于处理在应用程序中发生的错误,例如404 Not Found等。此种方式是通过请求转发实现的,出现异常时,会转发到请求到/error,该接口对异常进行处理返回,是最符合全局异常处理的。
105 2
|
Java
SpringBoot自定义异常处理
SpringBoot自定义异常处理
64 1
|
Java 开发者 Spring
Spring Boot 中关于自定义异常处理的套路!
Spring Boot 中关于自定义异常处理的套路!
|
JSON 前端开发 Java
《springboot实战》第六章 实现自定义全局异常处理
《springboot实战》第六章 实现自定义全局异常处理
211 0
|
安全 Java 数据库
SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理
提到权限管理这块肯定很多人第一想到的就是Springboot Security或者是Shiro安全框架,但本文介绍的并不是这两种,不是因为他们不好用,实在是自己太懒了,我觉得一个拦截器加上其他的一些处理就能满足项目的需求,我又何必去多用一个框架呢,这篇文章也不是去对比谁好谁坏,各位自行抉择。
84115 6
|
JSON 前端开发 JavaScript
SpringBoot系列教程web篇之自定义异常处理HandlerExceptionResolver
关于Web应用的全局异常处理,上一篇介绍了ControllerAdvice结合@ExceptionHandler的方式来实现web应用的全局异常管理; 本篇博文则带来另外一种并不常见的使用方式,通过实现自定义的HandlerExceptionResolver,来处理异常状态
492 0
SpringBoot系列教程web篇之自定义异常处理HandlerExceptionResolver
Springboot自定义异常处理
1.自定义异常类 import lombok.Data; @Data public class UserException extends RuntimeException { private Long id; public UserException(Long id) { super("user not exist"); this.
1509 0
|
JSON Java 测试技术
看看人家 SpringBoot 的全局异常处理,多么优雅。。。
本篇文章主要介绍的是SpringBoot项目进行全局异常的处理。 SpringBoot全局异常准备
看看人家 SpringBoot 的全局异常处理,多么优雅。。。
|
Java 编译器 程序员
SpringBoot全局异常处理
在开发软件系统过程中,异常信息是常见的,如何处理系统内部异常,快速定位BUG,是非常考验一位软件开发人员的功底。在软件系统开发过程中,统一自定义异常信息,统一对异常进行捕获处理,这样做能提高软件开发效率,并且使代码看起来更优雅。
422 0
|
JSON 前端开发 Java
SpringBoot全局异常处理(三十)下
SpringBoot全局异常处理(三十)下
291 0
SpringBoot全局异常处理(三十)下