第(5)节与第(6)节仔细研究了eladmin对于后端与前端的权限控制,本节主要讨论如何在系统中进行异常控制。
1. 后端异常定义
我们还是根据源码来寻找答案,仔细研究eladmin的官网对于异常处理的说明后,我们首先来看后端异常实体类ApiError

这个实体中主要封装三个信息
- 状态status,默认是400;
- timestamp,默认是当前的时间;
- String类型的message。
然后再看看通用异常BadRequestException的定义

由上图可知,BadRequestException封装了status与message,message需要传入,status默认是BAD_REQUEST,我们在IDEA中按住ctrl键点击可以看到

默认BAD_REQUEST的值为400。
官方给了两个自定义异常的实例,我们来看其中一个,EntityNotFoundException,看到名子就知道这是一个实体不存在异常,看看它的结构

这个异常类很简单,传入对象对应class类(其实主要就是获取类的名子,看箭头指示),再传入这个类的字段名,再传入字段中该类的值,然后输出消息"这个类的field字段值 val 不存在"。我们来举一个例子吧!
2. 后端已有异常类测试
首先在后端找到我们之前创建的“我的岗位管理”的gen模块,不清楚怎么利用代码生成器自动创建gen模块的请回看第(2)节与第(3)节的内容,打开MyJob这个类

我们发现有name字段属性,于是我们用EntityNotFoundException做一个测试,打开eladmin-system模块下的测试类EladminSystemApplicationTests,这部分代码,eladmin已经自动为我们配置好了,我们利用@Test测试方法抛出一个异常,如图:

利用junit运行该函数contextLoads,可以得到如下结果

使用就是这么简单。这里重点注意两个注解的使用

这两个注解保证在junit运行时会自动加载系统的上下文,这样EladminSystemApplicationTests才能识别出MyJob这个类,以后我们自己写系统的测试类时,一定要加上这两个注解。
官方还提供了一些默认的异常类(如下图),大家可以按照上面的方法自己测一下。

3. 后端全局异常拦截
参照官网,全局异常拦截定义在GlobalExceptionHandler中

这里一定要记住这两个关键注解:
- @RestControllerAdvice:默认会扫描指定包中所有@RequestMapping注解
- @ExceptionHandler:通过@ExceptionHandler的 value 属性可过滤拦截的条件,即按照抛出异常的类型分别进行处理
我们来做两个例子走一下全部的流程,深刻理解一下。
3.1 测试EntityNotFoundException
首先在进入“我的岗位管理”界面查询所有岗位时,抛出异常

在全局异常拦截类中GlobalExceptionHandler对Entity

最低0.47元/天 解锁文章
640

被折叠的 条评论
为什么被折叠?



