定义BusinessException继承RuntimeException,封装错误码与业务信息;2. 在服务层捕获SQLException等系统异常,转换为含错误码和原始异常的BusinessException;3. 结合Spring全局异常处理器统一响应,隐藏技术细节,提升可维护性与用户体验。

在Java开发中,通常需要将底层异常(如SQLException、IOException等)转换为自定义的业务异常,以便上层统一处理并避免暴露技术细节。以下是实现异常捕获与封装的关键步骤和示例。
创建一个继承自RuntimeException的自定义异常类,便于抛出且不需要强制捕获。
示例:
public class BusinessException extends RuntimeException {
private String errorCode;
public BusinessException(String errorCode, String message) {
super(message);
this.errorCode = errorCode;
}
public BusinessException(String message, Throwable cause) {
super(message, cause);
}
// getter方法
public String getErrorCode() {
return errorCode;
}
}
立即学习“Java免费学习笔记(深入)”;
在服务层或数据访问层中,使用try-catch捕获底层异常,并将其封装成业务异常抛出。
示例:
public void updateUser(User user) {
try {
// 可能抛出SQLException或其它异常
userDao.update(user);
} catch (SQLException e) {
throw new BusinessException("UPDATE_USER_FAILED", "用户更新失败");
} catch (IOException e) {
throw new BusinessException("IO_ERROR", "文件处理异常");
}
}
封装时建议保留原始异常作为cause,有助于排查问题。
改进写法:
catch (SQLException e) {
throw new BusinessException("UPDATE_USER_FAILED", "用户更新失败: " + e.getMessage(), e);
}
这样在日志中可以打印完整堆栈,同时对外返回的是清晰的业务错误码。
对于重复的封装逻辑,可配合Spring的@ControllerAdvice或AOP进行统一拦截,减少代码冗余。
也可以在控制器层面统一捕获BusinessException,返回标准格式的响应结果。
基本上就这些。关键是通过自定义异常类明确表达业务含义,同时隐藏底层细节,提升系统的可维护性和用户体验。
以上就是在Java中如何捕获异常并封装为业务异常返回的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号