SpringBoot 处理异常的几种常见操作

1. 使用 @ControllerAdvice 和 @ExceptionHandler 处理全局异常

这是目前很常用的一种方式,非常推荐。测试代码中用到了 Junit 5,如果你新建项目验证下面的代码的话,记得添加上相关依赖。

1. 新建异常信息实体类

非必要的类,主要用于包装异常信息。

SpringBoot 处理异常的几种常见操作

2. 自定义异常类型

SpringBoot 处理异常的几种常见操作

3. 新建异常处理类

我们只需要在类上加上@ControllerAdvice注解这个类就成为了全局异常处理类,当然你也可以通过 assignableTypes指定特定的 Controller 类,让异常处理类只处理特定类抛出的异常。

src/main/java/com/twuc/webApp/exception/GlobalExceptionHandler.java

SpringBoot 处理异常的几种常见操作

4. controller模拟抛出异常

src/main/java/com/twuc/webApp/web/ExceptionController.java

SpringBoot 处理异常的几种常见操作

使用 Get 请求 localhost:8080/api/resourceNotFoundException[1] (curl -i -s -X GET url),服务端返回的 JSON 数据如下:

SpringBoot 处理异常的几种常见操作

5. 编写测试类

MockMvc 由org.springframework.boot.test包提供,实现了对Http请求的模拟,一般用于我们测试 controller 层。

SpringBoot 处理异常的几种常见操作

2. @ExceptionHandler 处理 Controller 级别的异常

我们刚刚也说了使用@ControllerAdvice注解 可以通过 assignableTypes指定特定的类,让异常处理类只处理特定类抛出的异常。所以这种处理异常的方式,实际上现在使用的比较少了。

我们把下面这段代码移到 src/main/java/com/twuc/webApp/exception/GlobalExceptionHandler.java 中就可以了。

SpringBoot 处理异常的几种常见操作

3. ResponseStatusException

研究 ResponseStatusException 我们先来看看,通过 ResponseStatus注解简单处理异常的方法(将异常映射为状态码)。

src/main/java/com/twuc/webApp/exception/ResourceNotFoundException.java

SpringBoot 处理异常的几种常见操作

src/main/java/com/twuc/webApp/web/ResponseStatusExceptionController.java

SpringBoot 处理异常的几种常见操作

使用 Get 请求 localhost:8080/api/resourceNotFoundException2[2] ,服务端返回的 JSON 数据如下:

SpringBoot 处理异常的几种常见操作

这种通过 ResponseStatus注解简单处理异常的方法是的好处是比较简单,但是一般我们不会这样做,通过ResponseStatusException会更加方便,可以避免我们额外的异常类。

SpringBoot 处理异常的几种常见操作

使用 Get 请求 localhost:8080/api/resourceNotFoundException2[3] ,服务端返回的 JSON 数据如下,和使用 ResponseStatus 实现的效果一样:

SpringBoot 处理异常的几种常见操作

ResponseStatusException 提供了三个构造方法:

SpringBoot 处理异常的几种常见操作

构造函数中的参数解释如下:

•status :http status

•reason :response 的消息内容

•cause :抛出的异常

更多相关资料可在素质三连之后私信“学习”免费获取

原创文章 38 获赞 59 访问量 4087

猜你喜欢

转载自blog.csdn.net/Java0258/article/details/106062596