当前位置: 首页 > news >正文

自定义业务非受检异常

【受检和非受检异常】

  • 受检异常:当你需要强制调用者对异常异常进行处理时,抛出该类型异常。往往适用于开发通用的底层接口、或者调用第三方出现异常时。

  • 非受检异常:当你不需要调用者关心时,抛出该类型异常。往往适用于普通的业务流程开发。在大部分场景中,我们其实都使用该类异常即可,更利于代码的维护。

【需求背景】

在重构方法时,如果原来方法未抛出异常,你去重构时,需要抛出异常时,需要改造的地方比较多,特别是链路很长的时候。此时,就需要抛出 java.lang.RuntimeException 该类型的非受检异常。

在原有的 BusinessException 基础之上,新建一个 BusinessRuntimeException 非受检异常(继承:java.lang.RuntimeException)。

【改造方案】

rpc.dubbo.filter.MyExceptionFilter 用于把 Exception 异常在 dubbo 的生产者、消费者之间传递。

if (exception instanceof BusinessRuntimeException) {if(!exception.getClass().equals(BusinessRuntimeException.class)) {result.setException(((BusinessRuntimeException) exception).toBusinessRuntimeException(exception));}return result;
}

AbstractMyRestControllerAdvice 用于把异常信息进行封装返回给前端,用于更友好地提示给用户。

@Override
@ResponseBody
@ExceptionHandler(value = BusinessRuntimeException.class)
public ResultVO handlerBusinessRuntimeException(HttpServletRequest request, HttpServletResponse response, BusinessRuntimeException exception) {log.error("BusinessRuntimeException->{}", ExceptionUtils.getStackTrace(exception));ResultVO rv = convertBusinessRuntimeExcetionToResultVO(request, response, exception);trySetMessage(rv);return rv;
}

【使用案例】

   private void encryptSensitiveData(LegalInfo legalInfo) {try {...可能抛出异常的类} catch (Exception ex) {// 捕捉后抛出 BusinessRuntimeException 非受检异常log.error(ExceptionUtils.getStackTrace(ex));throw new BusinessRuntimeException(StateCode.S90100, String.format("身份证信息加密失败,原因:[%s]", ex.getMessage()));}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • iPhone数据恢复篇:iPhone 数据恢复软件有哪些
  • Internet Download Manager6.42最新下载器互联网冲浪小能手们!
  • 通过实例说明.NET Autofac依赖注入的多种方式
  • MySQL8.0~open_files_limit 和 innodb_open_files 参数生效取值标准
  • 《WebGIS快速开发教程》第7版发布
  • Winform中使用HttpClient实现调用http的post接口并设置传参content-type为application/json示例
  • python04——类(基础new)
  • MySQL Undo Log
  • 【MySQL】MySQL索引失效场景
  • AbyssFish单连通周期边界多孔结构2D软件
  • 【从零开始实现stm32无刷电机FOC】【理论】【3/6 位置、速度、电流控制】
  • c++:面向对象的继承特性
  • 防止应用调试分析IP被扫描加固实战教程
  • 随身WiFi市场乱象横生,随身WiFi测评最好的格行随身WiFi如何引领变革?
  • 【Oracle】Oracle数据库中的数据类型
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 0基础学习移动端适配
  • Angular 响应式表单之下拉框
  • django开发-定时任务的使用
  • Js基础知识(四) - js运行原理与机制
  • JS实现简单的MVC模式开发小游戏
  • Mac转Windows的拯救指南
  • nfs客户端进程变D,延伸linux的lock
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PHP 小技巧
  • Redux 中间件分析
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • VuePress 静态网站生成
  • 分布式任务队列Celery
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 基于webpack 的 vue 多页架构
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 深入浏览器事件循环的本质
  • 什么是Javascript函数节流?
  • 使用docker-compose进行多节点部署
  • 微服务框架lagom
  • 怎么将电脑中的声音录制成WAV格式
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #Linux(帮助手册)
  • $nextTick的使用场景介绍
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (力扣)1314.矩阵区域和
  • (三) diretfbrc详解
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (五)关系数据库标准语言SQL
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)程序员疫苗:代码注入
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .Net Core 中间件与过滤器
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net 应用中使用dot trace进行性能诊断