新闻中心
在J*a中如何使用ExceptionHandler统一处理异常_全局异常管理实践
通过@ControllerAdvice和@ExceptionHandler实现全局异常处理,结合自定义BusinessException与统一ErrorResponse格式,提升代码可维护性与用户体验。1. 定义GlobalExceptionHandler类捕获NullPointerException、IllegalArgumentException及自定义异常;2. BusinessException包含code与message便于前端识别;3. 所有异常返回标准JSON结构;4. 异常处理按类型匹配,具体异常优先,兜底Exception避免系统崩溃,同时记录日志且不抛出新异常。

在J*a开发中,特别是在使用Spring Boot构建的Web应用中,统一处理异常是提升代码可维护性和用户体验的重要手段。通过@ControllerAdvice和@ExceptionHandler,我们可以实现全局异常管理,避免在每个控制器中重复写try-catch块。
1. 使用@ControllerAdvice和@ExceptionHandler实现全局异常处理
Spring提供了@ControllerAdvice注解,它是一个增强版的@Component,能够将一个类定义为全局异常处理器。结合@ExceptionHandler,可以捕获所有控制器中抛出的指定类型异常。
示例代码:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(NullPointerException.class)
public ResponseEntity<String> handleNullPointer(NullPointerException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("发生了空指针异常:" + e.getMessage());
}
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<Map<String, Object>> handleIllegalArgument(IllegalArgumentException e) {
Map<String, Object> response = new HashMap<>();
response.put("error", "参数非法");
response.put("message", e.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response);
}
// 处理自定义业务异常
@ExceptionHandler(BusinessException.class)
public ResponseEntity<ErrorResponse> handleBusinessException(BusinessException e) {
ErrorResponse error = new ErrorResponse(e.getCode(), e.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error);
}
// 捕获未预期的其他异常
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleGeneralException(Exception e) {
ErrorResponse error = new ErrorResponse("INTERNAL_ERROR", "系统内部错误");
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}
}
2. 自定义异常类提升业务语义清晰度
为了更好地表达业务场景中的错误,建议定义自己的异常类,比如BusinessException,并包含错误码和提示信息。
示例:
public class BusinessException extends RuntimeException {
private String code;
public BusinessException(String code, String message) {
super(message);
this.code = code;
}
// getter方法
public String getCode() {
return code;
}
}
这样在业务逻辑中可以直接抛出带上下文信息的异常:
if (user == null) {
throw new BusinessException("USER_NOT_FOUND", "用户不存在");
}
3. 返回结构统一的错误响应体
前后端分离项目中,异常返回格式应保持一致,便于前端解析处理。
Machine Translation
聚合多个来源的AI翻译
49
查看详情
定义通用错误响应类:
public class ErrorResponse {
private String code;
private String message;
public ErrorResponse(String code, String message) {
this.code = code;
this.message = message;
}
// getter和setter省略
}
配合@ExceptionHandler返回该对象,前端收到JSON格式如:
{
"code": "USER_NOT_FOUND",
"message": "用户不存在"
}
4. 异常处理优先级与最佳实践
Spring会根据异常类型的继承关系选择最匹配的方法。更具体的异常(如NullPointerException)优先于Exception被处理。
几点建议:
- 把常见业务异常单独处理,提供友好提示
- 保留一个兜底的
@ExceptionHandler(Exception.class)防止系统崩溃暴露细节 - 记录日志时建议在异常处理器中加入
log.error(),方便排查问题 - 避免在异常处理器中再抛出异常,否则会进入容器默认错误页
基本上就这些。合理使用@ControllerAdvice和@ExceptionHandler,能让异常管理变得集中、清晰、可控。不复杂但容易忽略。
以上就是在J*a中如何使用ExceptionHandler统一处理异常_全局异常管理实践的详细内容,更多请关注其它相关文章!
# 是在
# 诸暨seo网站排名优化
# 网站建设兼职招聘
# 盐城网站优化推广软件
# 加强网站建设方案设计
# 商丘网站推广引流拓客是真的吗
# 少儿网站建设方案模板
# 杨浦高端网站建设有哪些
# 樟木头企业网站建设价格
# 仁怀seo优化
# 下城区网站优化价格
# 类属
# 多个
# java
# 自己的
# 器中
# 不存在
# 如何使用
# 抛出
# 自定义
# java开发
# 后端
# 处理器
# json
# 前端
# js
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南
Win11怎么开启省电模式_Win11电池节电模式自动开启
从OpenAI API响应中高效提取生成文本
C++如何实现异步操作_C++11使用std::future和std::async进行异步编程
Excel文件在线转换快速入口 Excel在线格式转换网站
Go Martini框架:动态服务解码后的图片内容
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
163邮箱官方主页登录 直达网易邮箱登录核心页面
Lar*el Form Request中唯一性验证在更新操作中的正确实现
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
Steam官网入口直达 Steam注册及登录步骤
在WordPress中通过REST API获取BasicAuth保护的远程文章
composer的"require-dev"部分是用来做什么的?
Composer如何在生产环境安全地执行composer update
J*aScript中高效管理与清空动态列表:避免循环陷阱
Golang如何使用const iota_Go iota常量计数器讲解
海棠电脑版入口_通过电脑访问海棠官网阅读
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略
漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端
知音漫客官网漫画下载_知音漫客网页版阅读记录
2026春节假期票务安排_2026春节放假购票指南
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
多闪网页版在线观看免费入口_多闪官网访问入口
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
微信网页版官方入口直达 微信网页版网页版登录使用方法
mysql如何设置表访问权限_mysql表访问权限配置
C++ string find函数返回值npos详解_C++字符串查找失败的判断条件
妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画
taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】
如何使用Go和Martini动态服务解码后的图片
c++如何实现单例设计模式_c++线程安全的单例模式写法
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
夸克浏览器网页版最新地址 夸克浏览器官方入口合集
抖音从哪里进入网页版_抖音官方入口链接
C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件
优化Log4j2控制台输出性能:解决异步日志瓶颈
J*aScript中在Map循环中检测并处理空数组元素
2025-2030年全球乘用车销量预测:新能源成增长主力
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南
css绝对定位元素脱离父容器怎么办_确保父元素position非static
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
Yandex免登录网页版地址 Yandex搜索引擎官方访问入口
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
汽水音乐网页版使用入口_汽水音乐电脑版播放指南
小红书网页版入口链接分享 小红书官网直接进
b站怎么取消点赞_b站点赞取消操作方法
J*aScript中安全有效地处理localStorage字符串数据
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】


2025-12-02
浏览次数:次
返回列表