讲师中心 微信公众号
AI工具推荐 视频效率加速

自定义异常类封装业务错误码与异常链传递实践

小强君_8972

小强君_8972

发布时间:2026-04-09 14:05:06

|

891人浏览过

|

来源于php中文网

原创

自定义异常类核心是错误码与异常链协同设计:错误码需分层枚举并含元信息,异常类须继承RuntimeException、支持cause传递及业务字段,严禁吞掉原始异常链,统一处理器中响应体精简而日志完整输出堆栈。

自定义异常类封装业务错误码与异常链传递实践

自定义异常类不是为了“造轮子”,而是让业务错误可识别、可追踪、可处理。核心在于两点:错误码与异常链的协同设计——错误码用于快速定位业务语义,异常链用于保留原始上下文(如数据库超时、网络中断等底层原因)。

错误码应分层且可枚举

避免用字符串或裸数字硬编码错误码。推荐定义统一的错误码枚举类,按模块划分,并包含描述、HTTP状态码(如适用)、是否可重试等元信息:

  • USER_NOT_FOUND("U001", "用户不存在", HttpStatus.NOT_FOUND, false)
  • ORDER_CREATE_FAILED("O002", "订单创建失败", HttpStatus.INTERNAL_SERVER_ERROR, true)

在自定义异常构造时直接传入枚举实例,确保错误码来源唯一、含义明确、便于国际化和日志聚合。

异常类需支持异常链与业务字段共存

继承 RuntimeException(或 Exception,视是否强制捕获而定),同时提供多参数构造器:既接收原始 cause(保持异常链),也接收错误码枚举、业务扩展字段(如订单ID、用户ID):

  • public BusinessException(ErrorCode code, String... args) { ... }
  • public BusinessException(ErrorCode code, Throwable cause, String... args) { super(code.getMessage(args), cause); ... }

这样既能通过 getCause() 向上追溯根本原因,又可通过 getErrorCode() 获取结构化业务标识,日志打印或网关统一封装时两者皆可利用。

避免“吞掉”原始异常链

常见反模式是在 service 层 catch 异常后仅抛出新异常却不传 cause,导致底层 SQLException 或 FeignException 丢失。务必检查每一层包装逻辑:

  • DAO 层抛出 DataAccessException → Service 层应封装为 BusinessException(ORDER_DB_ERROR, e)
  • 调用第三方 API 失败 → 包装时保留 FeignException 或 HttpClientErrorException 作为 cause

异常链完整,才能在排查时区分是业务规则拒绝,还是依赖服务不可用。

统一异常处理器中解耦响应与日志

在 @ControllerAdvice 中处理自定义异常时,响应体只返回错误码、消息、时间戳等必要字段;而日志中应额外打印 cause 的完整堆栈(包括 root cause):

  • log.error("业务异常[{}], traceId={}", ex.getErrorCode(), traceId, ex);
  • 响应 JSON 示例:{"code":"O002","msg":"订单创建失败","timestamp":"2024-06-15T10:30:00Z"}

这样前端可按 code 做友好提示,运维可通过日志快速下钻到真实故障点,无需翻查多层代码。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1975

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2682

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

936

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2999

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5239

2023.08.02

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

889

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2380

2023.10.25

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1558

2023.08.03

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

60

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn