up:: 定义通用的返回对象之返回正确的信息
说明:前面我们统一返回了处理成功的信息,这里我们处理异常错误的信息:
定义返回统一错误接口
说明:
这里抛出具体错误的方法后面会讲,先看下去,体会一下:
创建抛出统一错误类,继承Exception,实现接口CommonError
说明:
枚举异常,分为通用异常和具体异常
说明:
在Controller层抛出异常
测试写了具体异常原因
执行进入异常处理内:
执行到枚举异常里:
返回结果:
测试没有明确写异常信息
注意: 异常抛出一定要加@ResponseBody注解,可以把异常序列化为Json格式,如果不添加,将无法抛出异常。。。
还有就是erroCode如果为00001,序列化将会默认去掉前面的0,变成1,所以我们改为10001。
还有就是本节关于通用异常的处理解决了系统异常上的细颗粒度的问题,详见处理通用异常细颗粒度问题,我们这里返回通用异常的时候,可以自己在后面添加上自己写的的异常信息,就可以直接覆盖掉前面的通用异常,当然,学习前面的SpringBoot电商项目里的统一处理异常的细粒度一一列举出来,也是挺不错的。。。
非Cntroller层抛出异常
前面我们实现了在Controller层的异常实现抛出,那我们如果不在controller层的异常抛出该怎么办嘞?
向上面一样抛出异常看看
非controller层使用ExceptionHandler抛出异常
我们不仅service层可能会出问题,mapper层,sql查询也会出问题,有没有什么能够统一处理的嘞?
**这时候就要使用SpringMVC里的ExceptionHandler的处理方法:
Controller层的异常统一处理及返回 - 简书
前面我们学过这种处理方法,参考Spring Boot电商项目用户模块注册接口开发之全局统一处理异常
记得回去复习,前面讲的很细了!!!
说明:
关于instanceof的用法参考Java面向对象(四)
测试,再次访问
总结
我们异常分为controller层异常,和非controller层异常,以为我们异常都是要抛出到controller层呈现给前端或者用户的。。。
我们异常内亦可以分为通用的异常和自定义的异常,因为我们不可能将每个可能出现的问题都能预料到,但是我们需要尽可能的考虑到,所以我们添加了通用异常,异常不仅出现在代码块中,网络问题也有很多,我们只能统一处理为通用异常,重要的异常我们进行抛出能够有效增强代码维护,增强用户感知与交互,这就是代码的健壮性要求!