最近在用spring boot 做微服务,所以对于异常信息的 【友好展示】有要求,我设计了两点:

一、 在业务逻辑代码中,异常的抛出 我做了限定,一般只会是三种:           

1. OmcException                        //自己写的异常包装类 ,主要用来处理业务异常
2. IllegalArgumentException            //参数异常类,其实这个可以不要,只是在我的系统中,我想把参数异常和业务异常做区分
3. 其他的异常,都按Exception抛            //因为它的抽象层次最高,所以在系统中按优先级最低进行处理,除非必要(如容器级错误)否则尽量避免

 OmcException的构造是这样的:

  

这里留个钩子:

为什么要在抛异常时,带上 日志的信息 + 输入参数的信息?

       —— 因为,我希望在业务逻辑代码中,对于这些异常的处理,最好就是一行代码,类似于:打印error日志 + 向用户返回友好的错误信息。我想做一个公共的处理模块。让业务逻辑代码尽可能的清爽一些。

对异常的进行try-catch包装的过程是:

    

对异常的抛出做限定,给个总结就是:尽量包装成我们自己封装的异常包装类。

为什么呢? 这是在设计上做限定,那么后进的程序员,如果不按照这个规范走,功能是做不出来的。这个也是架构设计的意义,不要随便动个嘴就好,还要把栅栏建好。

二、 在公共的业务逻辑处理代码中,异常的接收(或者说异常的路由) 我做了限定,一般是:

1. 先匹配业务异常。业务异常一般向用户提示什么呢? 错误编码 + 错误提示信息。

2. 其次,匹配参数异常,这些参数异常可能是我们自己做参数校验抛出来的,也有可能是spring mvc 抛出来的,所以还没有到我们的业务逻辑代码中。

  参数异常一般提示什么呢? 错误提示信息(包含哪个字段出现了错误)

3. 根异常Exception,这里捕获的异常,可能是我们不愿意处理的 数据库异常,也有可能是容器报的异常(当然,这些异常我们并不能捕获所有的。)这里要做打error日志的处理。

  一个设计良好的系统,最好是不要走进这个分支,毕竟分析error日志不是一件多么光荣的事儿。

spring boot中,公共异常处理模块代码结构是:

然后是,打印error日志 + 向用户返回友好的错误信息

       

转载于:https://www.cnblogs.com/haore147/p/6088829.html

系统中异常公共处理模块 in spring boot相关推荐

  1. 用好 DIV 和 API,在前端系统中轻松嵌入数据分析模块

    在数字化转型潮流席卷各大行业的今天,越来越多的企业开始重视 BI(商业智能)技术的部署和应用,期望从不断增长的数据资源中获得更多业务价值,从而提升利润.控制风险.降低成本.BI 能整合.组织和分析数据 ...

  2. 极其简单的 使用IDEA 中 实现springboot 热部署 (spring boot devtools版)

    添加配置pom.xml配置 第一步:添加springboot的配置文件 首先我先贴出我的配置 添加依赖包 <!-- spring boot devtools 依赖包. --><dep ...

  3. 使用Maven创建多模块父子Spring Boot工程

    使用Maven创建Spring Boot工程_紫月下枫叶的博客-CSDN博客目录1.开发环境2.创建普通maven工程3.添加Spring Boot父工程4.添加Web场景依赖5.添加主程序6.添加C ...

  4. OA系统中包含哪些功能模块

    很多人不知道OA是什么,最近谈一个客户,对这方面一点也不了解,今天给大家简单说一下. 企业OA系统是把企业.部门.个人的信息录入系统,公司的新闻.通知.公告等需要企业员工获知的信息都展现到系统当中,让 ...

  5. linux系统中无法找到指定模块(终极解决办法)

    运行 demo.py 时,如上图,不管如何修改代码都显示找不到模块. 代码结构如下: 出现问题:在多目录结构的代码中,容易出现找不到模块的情况,但确实是有模块却找不到原因. 终极解决办法: 在impo ...

  6. Linux系统中Python3安装pip3模块

    Linux系统操作 获取安装文件 官网下载部分文件等 wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz 编译打包 注意为了能够 ...

  7. 签到功能设计(含每日签到、固定时段签到、定位并签到模块)-spring Boot版本java web项目,附源码下载地址

    一.签到类型 每日签到:每日开放签到,时间记录为:年.月.日. 固定时段签到:每日固定时段签到,时间记录为:年.月.日.时.分.秒. 核心问题:判断用户签到时间是否在规定的时间段内. 定位并签到:每日 ...

  8. 三分钟了解APS系统中生产计划排程模块的基本原理!

    高级计划系统APS作为ERP的补充,用于协调物流.开发瓶颈资源和保证交货日期.APS包括需求和供应计划.运输和生产计划排程等各种供应链计划模块,本文主要介绍APS中生产计划排程模块的基本原理. 决策状 ...

  9. Spring Boot框架中使用Jackson的处理总结

    1.前言 通常我们在使用Spring Boot框架时,如果没有特别指定接口的序列化类型,则会使用Spring Boot框架默认集成的Jackson框架进行处理,通过Jackson框架将服务端响应的数据 ...

最新文章

  1. ASP.NET网页中RAR、DOC、PDF等文件下载功能实例源代码
  2. ftp可以传输什么类型文件_使用FTP文件传输典型案例配置
  3. Fedora的ifconfig命令
  4. switch判断条件
  5. 隐藏在计算机网卡怎样删除,如何卸载电脑中隐藏的虚拟网卡设备
  6. oracle的rank,over partition 使用 和lead
  7. 无线电波的入侵第1部分——无线电频率基础与理论
  8. linux鼠标键盘被禁用了,debian squeeze下鼠标、键盘突然被系统禁用
  9. python机器学习案例系列教程——关联分析(Apriori、FP-growth)
  10. 战地一的服务器在哪个文件夹,战地1怎么加入服务器 战地1加入服务器方法
  11. Emacs 配置 Python 编程环境
  12. 怎么把两个pdf合并成一个pdf?
  13. Mac屏幕截图快捷键
  14. UiPath Excel内容去重操作
  15. 渗透技巧总结、渗透技巧
  16. PROGRESSIVE GROWING OF GANS FOR IMPROVED QUALITY, STABILITY, AND VARIATION(PGGAN)
  17. [Win Desktop] Windows 桌面应用推荐一
  18. WMS系统后端API开发-收货单(ReceiptOrder) API
  19. 最大回撤率 和 移动数组零元素到末尾
  20. Spring MVC---Controller配置总结(二)

热门文章

  1. php调整表格样式,表格的创建以及样式修改
  2. mysql怎么创建文字表_myMySQL数据库 如何将中文转拼音 MySQL数据库使用教程
  3. class vue 添加图片_vue+element 添加图片组件
  4. 单词搜索Python解法
  5. mysql batch mode_MySQL数据库增量日志解析工具 Canal 实战
  6. idea中生成spring的 xml配置文件_【132期】面试再被问到Spring容器IOC初始化过程,就拿这篇文章砸他~...
  7. java hh mm ss_【Java基础】比较时间大小(以HH:mm:ss格式为例)
  8. 大数据复核_【BIM技术】三维扫描结合BIM技术在结构复核中的应用
  9. python怎么连接数据库_python3.x怎么连接mysql数据库
  10. 物联网第一台设备是烤面包机?