系统中异常公共处理模块 in spring boot
最近在用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相关推荐
- 用好 DIV 和 API,在前端系统中轻松嵌入数据分析模块
在数字化转型潮流席卷各大行业的今天,越来越多的企业开始重视 BI(商业智能)技术的部署和应用,期望从不断增长的数据资源中获得更多业务价值,从而提升利润.控制风险.降低成本.BI 能整合.组织和分析数据 ...
- 极其简单的 使用IDEA 中 实现springboot 热部署 (spring boot devtools版)
添加配置pom.xml配置 第一步:添加springboot的配置文件 首先我先贴出我的配置 添加依赖包 <!-- spring boot devtools 依赖包. --><dep ...
- 使用Maven创建多模块父子Spring Boot工程
使用Maven创建Spring Boot工程_紫月下枫叶的博客-CSDN博客目录1.开发环境2.创建普通maven工程3.添加Spring Boot父工程4.添加Web场景依赖5.添加主程序6.添加C ...
- OA系统中包含哪些功能模块
很多人不知道OA是什么,最近谈一个客户,对这方面一点也不了解,今天给大家简单说一下. 企业OA系统是把企业.部门.个人的信息录入系统,公司的新闻.通知.公告等需要企业员工获知的信息都展现到系统当中,让 ...
- linux系统中无法找到指定模块(终极解决办法)
运行 demo.py 时,如上图,不管如何修改代码都显示找不到模块. 代码结构如下: 出现问题:在多目录结构的代码中,容易出现找不到模块的情况,但确实是有模块却找不到原因. 终极解决办法: 在impo ...
- Linux系统中Python3安装pip3模块
Linux系统操作 获取安装文件 官网下载部分文件等 wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz 编译打包 注意为了能够 ...
- 签到功能设计(含每日签到、固定时段签到、定位并签到模块)-spring Boot版本java web项目,附源码下载地址
一.签到类型 每日签到:每日开放签到,时间记录为:年.月.日. 固定时段签到:每日固定时段签到,时间记录为:年.月.日.时.分.秒. 核心问题:判断用户签到时间是否在规定的时间段内. 定位并签到:每日 ...
- 三分钟了解APS系统中生产计划排程模块的基本原理!
高级计划系统APS作为ERP的补充,用于协调物流.开发瓶颈资源和保证交货日期.APS包括需求和供应计划.运输和生产计划排程等各种供应链计划模块,本文主要介绍APS中生产计划排程模块的基本原理. 决策状 ...
- Spring Boot框架中使用Jackson的处理总结
1.前言 通常我们在使用Spring Boot框架时,如果没有特别指定接口的序列化类型,则会使用Spring Boot框架默认集成的Jackson框架进行处理,通过Jackson框架将服务端响应的数据 ...
最新文章
- ASP.NET网页中RAR、DOC、PDF等文件下载功能实例源代码
- ftp可以传输什么类型文件_使用FTP文件传输典型案例配置
- Fedora的ifconfig命令
- switch判断条件
- 隐藏在计算机网卡怎样删除,如何卸载电脑中隐藏的虚拟网卡设备
- oracle的rank,over partition 使用 和lead
- 无线电波的入侵第1部分——无线电频率基础与理论
- linux鼠标键盘被禁用了,debian squeeze下鼠标、键盘突然被系统禁用
- python机器学习案例系列教程——关联分析(Apriori、FP-growth)
- 战地一的服务器在哪个文件夹,战地1怎么加入服务器 战地1加入服务器方法
- Emacs 配置 Python 编程环境
- 怎么把两个pdf合并成一个pdf?
- Mac屏幕截图快捷键
- UiPath Excel内容去重操作
- 渗透技巧总结、渗透技巧
- PROGRESSIVE GROWING OF GANS FOR IMPROVED QUALITY, STABILITY, AND VARIATION(PGGAN)
- [Win Desktop] Windows 桌面应用推荐一
- WMS系统后端API开发-收货单(ReceiptOrder) API
- 最大回撤率 和 移动数组零元素到末尾
- Spring MVC---Controller配置总结(二)
热门文章
- php调整表格样式,表格的创建以及样式修改
- mysql怎么创建文字表_myMySQL数据库 如何将中文转拼音 MySQL数据库使用教程
- class vue 添加图片_vue+element 添加图片组件
- 单词搜索Python解法
- mysql batch mode_MySQL数据库增量日志解析工具 Canal 实战
- idea中生成spring的 xml配置文件_【132期】面试再被问到Spring容器IOC初始化过程,就拿这篇文章砸他~...
- java hh mm ss_【Java基础】比较时间大小(以HH:mm:ss格式为例)
- 大数据复核_【BIM技术】三维扫描结合BIM技术在结构复核中的应用
- python怎么连接数据库_python3.x怎么连接mysql数据库
- 物联网第一台设备是烤面包机?