首先我们来了解一下为什么要进行自定义异常的处理 我们还是和以前一样在service当中抛出RuntimeException的报错 ![](https://img.kancloud.cn/bc/83/bc830fdfd430def74f7f9ff2bf80f09e_1726x638.png) 这个时候就会走我们前面定义的统一异常处理的类当中去 ![](https://img.kancloud.cn/bb/3b/bb3b30f580483c92d661997475be7611_1268x720.png) 然后返回给前端的结果就是这样的 ![](https://img.kancloud.cn/ee/26/ee26ab5ba0816701249e69970e0a0aef_1311x336.png) 这样的返回结果对于前端来说是非常不友好的 ### 所以我们需要自定义异常类,遵守的原则就是:业务上的错误直接返回错误提示信息,如果是系统的报错比如mysql主键冲突等则不给前端返回具体的报错代码而是返回系统报错请联系管理员,再由后端程序员去排查具体的报错原因看日志!!! ### 所以我们就得要自定义异常处理来处理业务上的各种可能出现的错误 ### 首先在common公共模块创建exception来存放自定义异常类所需要用到的枚举类 ![](https://img.kancloud.cn/7d/7a/7d7a2cad9dc9ab2efcda2f6078da17ce_1040x918.png) 然后再去创建自定义异常类BusinessException ![](https://img.kancloud.cn/07/62/07624bc2e43c6d7593eb868eddfba3a4_1457x733.png) 这样我们就可以在枚举类当中写很多的自定义报错信息比如: ![](https://img.kancloud.cn/bd/f2/bdf23cb2ea231604c878940fc39d70a4_1760x1430.png) 每一个`MEMBER_MOBILE_EXIST("手机号已注册") ` `MEMBER_MOBILE_NOT_EXIST("请先获取短信验证码")`...**都是这个枚举类BusinessExceptionEnum的实例**!!! ### ![](https://img.kancloud.cn/8c/d2/8cd2fa76b24929108a1adfaa8e1c617b_1687x966.png) ### **然后我们就可以在common公共模块当中的ControllerExceptionHandler统一异常处理类当中来加上我们自定义的业务异常处理了** ![](https://img.kancloud.cn/00/3d/003d7b977eb10220a2eca336e696350f_1218x977.png) ### **我们重点来讲解一下枚举类和自定义异常类之间的关系和使用** ### ![](https://img.kancloud.cn/d0/9f/d09fa862e62f7e39b0bc6048adc07cd7_1552x972.png) ### ![](https://img.kancloud.cn/b9/28/b928b2dbed503e7ee956069aa52c124f_1673x872.png) ### **我们测试一下如果发生系统异常的情况** ![](https://img.kancloud.cn/3d/21/3d21960232c6d1c028e88d432e0a6a5d_1305x737.png) ### ![](https://img.kancloud.cn/7c/47/7c4725e97045925f662877a0be520e8f_1680x979.png) ### 当然你也可以打开commonResp.setContent(e.getMessage())来获取到具体的报错日志信息 ### **我们再测试一下如果发生业务异常的情况** ![](https://img.kancloud.cn/80/b8/80b8a332316e4d9960348cb625577e1e_1686x963.png) ![](https://img.kancloud.cn/32/ba/32bae3afbef3031ee401fbdde41ef199_1197x919.png) 前端给出了友好的提示并且日志当中也记录了业务异常信息 ![](https://img.kancloud.cn/90/46/9046de0fc105091d40df13240aee93ae_1785x773.png)