阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_18-异常处理-不可预知异常处理

框架抛出来的或者一些第三方的组件抛出来的异常。我们根本不知道它所对应的错误代码的信息,所以我们也没有办法给用户返回具体的错误代码和错误信息。
我们先在Map中定义有一些不可预知的异常,定义错误代码和错误信息。如果我们在map中找到了这个错误代码,我们可以给用户返回,如果我们没有找到。就返回统一的99999异常
这种异常我们自定义的错误代码。例如返回操作失败,请与管理员联系这种。
对于不可预知的异常我们这么去处理。

首先模拟一下不可预知的异常。添加的方法,我们body里面不传json数据就调用后端方法

这个时候返回了400错误信息,这不是我们统一的响应格式信息。


这才是我们统一的响应信息


要么把这类异常返回为99999。要么就把这些异常定义一个具体的代码

首先在项目里面我们想把这类异常捕获到。在异常捕获类里面,这里@ExceptionHandler来捕获Exception.class这个类型的异常。
但是这里我们获取不到异常的代码

在这里加一个断点,我们看下异常的类型是什么

断点进来。把这个捕获的异常信息复制出去。


异常意思是请求的body 没有数据

争对这类异常我们统一返回99999。就是CommCode这个枚举里面的Server_error

例如这里我们返回99999

这样最终统一返回的数据如下

Map中定义

有些不可预知的异常是可以定义错误代码的


我们可以对HttpMessageNotReadableException这个类型定义错误代码。

在CommonCode定义非法参数的这个枚举

ImmutableMap 是谷歌的工具包下的类型,这个map的数据一旦放进去是不可更改的。也就是只读的

前面的表示异常类型,异常都是会继承Throwable。后面是异常代码


再定义builder对象,builder对象是用来构建ImmutableMap的。注意修饰符是protected

那么怎么去构建呢?放在静态代码块里面。现在这个数据还在这个builder里面 ,一旦builder把数据构建到Map里面。这个map的数据将不能更改。

使用builder.build方法构建Map

测试

在这里加一个断点

空指针异常


这里应该用EXCEPTIONS来接收build构建的map对象。

再次测试

找到了错误代码并返回。





把这个请求改成get再去请求数据。返回的错误代码是 99999 因为这个错误没有加入到我们错误Map集合中。


以上不可预知异常处理就做完了。






 

猜你喜欢

转载自www.cnblogs.com/wangjunwei/p/11578663.html