怎么自定义业务异常类并继承 RuntimeException 简化报错处理

冬瑶姑娘_2242

冬瑶姑娘_2242

2026-04-20

148人浏览

原创

继承 runtimeexception 是因为其为非检查异常,调用方无需强制处理,便于业务异常向上冒泡并由 controller 统一兜底;自定义 businessexception 至少需 errorcode、message 和可选扩展参数,推荐 string 类型 errorcode 与两种构造函数;spring boot 中用 @controlleradvice + @exceptionhandler 返回 responseentity 实现统一 json 错误响应,http 状态码应语义化(如 404/403/409),异常消息避免硬拼接,应分离错误码与参数以支持国际化和演进。

怎么自定义业务异常类并继承 runtimeexception 简化报错处理

为什么继承 RuntimeException 而不是 Exception

因为 RuntimeException 是非检查异常(unchecked),调用方不用强制 try-catch 或 throws,业务代码更干净。比如服务层抛 BusinessException,Controller 统一捕获并转成 HTTP 错误响应,中间的 service、dao 层完全不用写异常处理逻辑。

如果继承 Exception,每层都得声明或捕获,违背“业务异常应向上冒泡、由统一入口兜底”的设计意图。

自定义 BusinessException 的最小必要字段

一个实用的业务异常至少要携带:错误码(errorCode)、提示语(message)、可选的扩展参数(如订单号、用户 ID)。不建议塞太多字段——日志上下文靠 MDC 补,堆栈靠父类自带,序列化靠框架自动处理。

  • errorCode 用 String 类型,方便区分系统级(如 "SYS_001")和业务级(如 "ORDER_NOT_FOUND")
  • 构造函数优先提供 (String errorCode, String message) 和 (String errorCode, String message, Throwable cause) 两种
  • 避免重写 getMessage() —— 它会被日志框架直接调用,改了反而干扰排查

Spring Boot 中如何统一捕获并返回 JSON 错误响应

用 @ControllerAdvice + @ExceptionHandler 拦住所有 BusinessException,避免每个 Controller 都写重复逻辑。

ChatsNow
ChatsNow

一款集成AI聊天、翻译和搜索辅助能力的浏览器扩展,可直接在浏览网页时调用AI处理文字和信息任务。

下载

注意两点:

  • 确保 @ExceptionHandler(BusinessException.class) 方法返回的是 ResponseEntity> 或带 @ResponseBody 的对象,否则可能被视作视图名
  • 不要在 handler 里手动 log.error("", ex) —— BusinessException 本身不含敏感数据,但堆栈会泄露实现细节;真要打日志,用 log.warn("业务异常: {}", ex.getMessage(), ex),既留痕又不泄密
  • HTTP 状态码别硬写 400,按语义选:404(资源不存在)、403(权限不足)、409(冲突)更准确

容易被忽略的坑:异常消息拼接与国际化

别在抛异常时用 String.format("订单 %s 不存在", orderId) 拼消息 —— 这会让前端无法做 i18n,也难做错误码聚合统计。

正确做法是把变量作为独立字段传入异常实例,再由统一响应处理器结合 locale 渲染最终提示:

throw new BusinessException("ORDER_NOT_FOUND", "订单不存在", Map.of("orderId", orderId));

这样后端能按需格式化,前端也能拿到原始码和参数自行翻译。如果项目没上 i18n,至少保留参数结构,为后续演进留余地。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9717

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6862

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6072

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1064

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

888

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1276

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2549

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19891

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1155

8

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习