目录
🍃前言
今天我们将对图书管理系统进行收尾工作,今天的开发任务有两个
- 实现统一数据返回格式
- 实现统一异常的处理
🎍统一数据返回格式
在前面文章讲到,通过拦截器实现了登录验证功能,但是对于数据的返回还没有处理
代码:
但是如果每一个接口都这样写,岂不太麻烦了一点儿。
其实spring boot为我们提供了统一数据格式返回的功能
🚩快速入门
统⼀的数据返回格式使⽤ @ControllerAdvice 和ResponseBodyAdvice 的⽅式实现@ControllerAdvice 表⽰控制器通知类
添加类 ResponseAdvice ,实现 ResponseBodyAdvice 接⼝,并在类上添加@ControllerAdvice 注解
- supports方法:判断是否要执行beforeBodyWrite方法.true为执行,false不执行.通过该⽅法可以选择哪些类或哪些方法的response要进行处理,其他的不进行处理
- beforeBodyWrite方法:对response方法进行具体操作处理
添加统⼀数据返回格式之前:
添加统⼀数据返回格式之后:
🚩存在问题
问题现象:
我们继续测试登录的接⼝:
结果显⽰,发⽣内部错误
查看⽇志,⽇志报错
多测试⼏种不同的返回结果,发现只有返回结果为String类型时才有这种错误发⽣,这里不在演示
解决⽅案:
如果⼀些⽅法返回的结果已经是Result类型了,那就直接返回Result类型的结果即可
代码:
🚩统一格式返回的优点
- ⽅便前端程序员更好的接收和解析后端数据接⼝返回的数据
- 降低前端程序员和后端程序员的沟通成本,按照某个格式实现就可以了,因为所有接⼝都是这样返回的.
- 有利于项⽬统⼀数据的维护和修改.
- 有利于后端技术部⻔的统⼀规范的标准制定,不会出现稀奇古怪的返回内容
🍀统一异常处理
当我们程序出现异常的时候,Spring会对我们进行异常相关的处理,当发生异常的时候,它会走到BasicErrorcontroller类中的 error方法。
我们可以自己来处理异常。
统⼀异常处理使⽤的是 @ControllerAdvice+@ExceptionHandler 来实现的
- @ControllerAdvice 表⽰控制器通知类
- @ExceptionHandler 是异常处理器
两个结合表示当出现异常的时候执行某个通知,也就是执行某个方法事件
简单使用如下:
也可通过@RestControllerAdvice注解
还可以设置捕获什么类型的异常,不写的话就以参数为准(上述的Exception)
还可以对异常进行细分:
🌲前端代码的修改
🚩登录页面
登录界⾯没有拦截,只是返回结果发⽣了变化,所以只需要根据返回结果修改对应代码即可
登录结果代码修改
🚩图书列表
针对图书列表⻚有两处变化
- 拦截器进行了强制登录校验,如果校验失败,则http状态码返回401,此时会⾛ajax的error逻辑处理
- 接⼝返回结果发生了变化
图书列表代码修改: