框架抛出来的或者一些第三方的组件抛出来的异常。我们根本不知道它所对应的错误代码的信息,所以我们也没有办法给用户返回具体的错误代码和错误信息。
我们先在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集合中。

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

转载于:https://www.cnblogs.com/wangjunwei/p/11578663.html

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

  1. 2023年最新黑马程序员Java微服务项目--学成在线

    正式上线Java微服务项目<学成在线> 项目对程序员的重要性 不用播妞多说了吧 更重要的是 这次是完整!实战!企业级!项目! 划重点:全新发布!正式上线! <学成在线>项目以在 ...

  2. 学成在线--7.CMS页面管理开发(异常处理)

    文章目录 1.异常处理的问题分析 2.异常处理流程 3.可预知异常处理 1.自定义异常类 2.异常抛出类 3.异常捕获类 4.异常处理测试 1)定义错误代码 2)异常处理测试 4.不可预知异常处理 1 ...

  3. 学成在线--5.CMS页面管理开发(修改页面)

    文章目录 1.修改页面流程 1)前端逻辑 2)后端逻辑 2.修改页面接口定义 3.后端开发--Dao 4.后端开发--Service 5.后端开发--Controller 1)根据id查询页面 2)保 ...

  4. 学成在线--6.CMS页面管理开发(删除页面)

    文章目录 0.删除用户逻辑 1.删除页面接口定义 2.后端开发--Dao 3.后端开发--Service 4.后端开发--controller 5.前端开发--page_list.vue添加删除按钮 ...

  5. 学成在线--4.CMS页面管理开发(新增页面)

    文章目录 1.定义新增页面接口 1)在model工程中定义响应模型 2)在api工程中添加接口 2.新增页面服务端开发 1)Dao 2)Service 3)Controller 3.新增页面前端开发 ...

  6. 学成在线--3.CMS页面管理开发(自定义条件查询)

    文章目录 0.需求分析 1.服务端--Dao 2.服务端--Service 3.服务端--Controller 4.前端 1)page_list.vue中增加查询表单 2)page_list.vue中 ...

  7. 学成在线 职业规划 页面

    学成在线 职业规划 页面 为什么这么赶呢,主要是PS白嫖期快过了1/3了,总得赶在试用期之前做完嘛-- 之前的进度 第一版跟着视频做的,也写了步骤分解,详情可以看这个:学成在线 制作分解版. 完整的页 ...

  8. 学成在线 课程列表 页面

    学成在线 课程列表 页面 在美好的礼拜天,正好我们不调休,把最后一个页面给完成了. 和其他用浮动座位布局方式比起来,课程类表页面最终还是使用了flexbox去布局,一来主要内容最下面的 分页 部分用浮 ...

  9. 微服务实战项目-学成在线-课程发布模块

    学成在线-课程发布模块 1 模块需求分析 1.1 模块介绍 课程信息编辑完毕即可发布课程,发布课程相当于一个确认操作,课程发布后学习者在网站可以搜索到课程,然后查看课程的详细信息,进一步选课.支付.在 ...

  10. 学成在线首页——静态页面基础项目(HTML+CSS)【学习笔记】

    来源:黑马前端 难度:⭐(简单)--适合刚学习html和css的新手小白 源码和素材:链接: https://pan.baidu.com/s/1Qf6OuMNyFDswJOcB93NCrw 提取码: ...

最新文章

  1. Linux 操作系统原理 — 内存 — mmap 进程虚拟内存映射
  2. python 保留两位小数 实现方法
  3. Pandas简明教程-适用于竞赛、研究以及办公自动化
  4. js window.open()实现打印,如何在关闭打印窗口时刷新父窗口
  5. Java 高并发下的实践
  6. 路透社:谷歌已停止与华为部分合作;联想否认断供华为PC;微软计划直供Linux内核;谷歌无人机快递Wing进军芬兰……...
  7. js 判断移动端还是pc端,ios或者android
  8. git web框架搭建_Git,Python Web框架,AI,机器学习,Android,Linux和更多必读内容
  9. 希科系统(CxServer)经济效益和社会效益分析
  10. wav格式怎么转换成flac?
  11. R语言实现随机分组(按照学号或者是姓名随机分组)
  12. 计算机键盘最小化,电脑最小化键盘怎么按
  13. 检测站营销系列文章:机动车检测站如何做精益营销?
  14. 解决ios微信公众号h5页面新增底部前进后退导航栏产生的布局问题
  15. 架构必备:Rate limiting 的作用和常见方式
  16. 如何卸载Cygwin
  17. 【MarkDown使用技巧】轻松搞定MarkDown
  18. BUUCTF-Crypto-看我回旋踢
  19. 干货 | 80篇+网络安全面试经验帖
  20. Gitee使用时TimeOut问题解决

热门文章

  1. 拓端tecdat|R语言蒙特卡洛方法:方差分量的Metropolis Hastings(M-H)、吉布斯Gibbs采样比较分析
  2. matlab 分水岭法,matlab中的分水岭算法
  3. java activit怎么画图_Activiti 入门示例
  4. 指定LINUX内存大小,linux下内存大小、起始地址的解析与修改
  5. python pandas 之drop()函数
  6. img = cv2.imread() 后面要跟im = im[:, :, (2, 1, 0)] # 图片做预处理
  7. ubuntu将一个文件夹下的所有内容复制到另一个文件夹下
  8. Ubuntu 16.04 安装QQ, TIM
  9. 修改linux文件权限命令:chmod超级详细讲解
  10. 零基础学启发式算法(6)-蚁群算法 (Ant Colony Optimization, ACO)