新闻中心
J*a里如何使用ExceptionHandler统一处理Web请求异常_Web异常集中处理方法说明
通过@ControllerAdvice和@ExceptionHandler实现全局异常处理,结合自定义业务异常、ResponseStatus注解及验证异常捕获,可统一返回结构化错误信息,提升接口健壮性与用户体验。

在J*a的Web开发中,特别是在使用Spring或Spring Boot框架时,统一处理Web请求异常可以极大提升代码的可维护性和用户体验。通过@ControllerAdvice和@ExceptionHandler注解,我们可以实现全局异常集中管理,避免在每个控制器中重复写异常捕获逻辑。
1. 使用@ControllerAdvice和@ExceptionHandler处理异常
Spring提供了@ControllerAdvice注解,用于定义全局异常处理器。它能拦截所有控制器抛出的异常,并通过@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> error = new HashMap<>();
error.put("error", "参数错误");
error.put("message", e.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<Map<String, Object>> handleGeneralException(Exception e) {
Map<String, Object> error = new HashMap<>();
error.put("error", "服务器内部错误");
error.put("message", e.getClass().getSimpleName() + ": " + e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);
}
}
上述代码中,不同类型的异常由不同的方法处理,返回结构化的错误响应。最通用的Exception.class放在最后,作为兜底处理。
2. 自定义业务异常并统一处理
在实际项目中,建议定义自己的业务异常类,便于区分系统异常和业务逻辑异常。
public class BusinessException extends RuntimeException {
public BusinessException(String message) {
super(message);
}
}
然后在全局异常处理器中添加对应处理方法:
@ExceptionHandler(BusinessException.class)
public ResponseEntity<Map<String, Object>> handleBusinessException(BusinessException e) {
Map<String, Object> response = new HashMap<>();
response.put("error", "业务异常");
response.put("message", e.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response);
}
这样在Service或Controller中可以直接抛出throw new BusinessException("用户名已存在"),由全局处理器统一响应。
文心智能体平台
百度推出的基于文心大模型的Agent智能体平台,已上架2000+AI智能体
393
查看详情
3. 结合ResponseStatus注解简化处理
除了在@ExceptionHandler中手动设置HTTP状态码,也可以在自定义异常上使用@ResponseStatus注解,自动映射状态码。
@ResponseStatus(value = HttpStatus.FORBIDDEN, reason = "权限不足")
public class AccessDeniedException extends RuntimeException {
public AccessDeniedException(String message) {
super(message);
}
}
只要这个异常被抛出,Spring会自动返回403状态码,无需在@ExceptionHandler中再指定状态。
4. 处理验证异常(如MethodArgumentNotValidException)
当使用@Valid进行参数校验时,若校验失败会抛出MethodArgumentNotValidException。可以在全局处理器中捕获并提取错误字段信息。
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, Object>> handleValidationException(MethodArgumentNotValidException e) {
Map<String, Object> errors = new HashMap<>();
errors.put("error", "参数校验失败");
List<String> messages = e.getBindingResult()
.getFieldErrors()
.stream()
.map(FieldError::getDefaultMessage)
.collect(Collectors.toList());
errors.put("messages", messages);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errors);
}
这样前端能收到具体的字段错误提示,提升交互体验。
基本上就这些。通过合理使用@ControllerAdvice和@ExceptionHandler,配合自定义异常和验证处理,可以实现清晰、统一的Web异常响应机制,让后端接口更健壮、易维护。
以上就是J*a里如何使用ExceptionHandler统一处理Web请求异常_Web异常集中处理方法说明的详细内容,更多请关注其它相关文章!
# 转换为
# 新蔡网络营销与推广
# 黄页网站与推广
# 重庆合川网站优化哪里好
# 临沂哪里有网站优化公司
# seo推广免费学习
# 拼多多怎么养关键词排名
# 加完微信后如何做营销推广
# 淮安网站建设首选
# 店面营销推广文案简短
# 长安网站seo
# 持续时间
# 多条
# java
# 可以实现
# 器中
# 如何使用
# 错误信息
# 抛出
# 自定义
# 状态码
# stream
# 后端
# access
# 处理器
# 前端
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
如何在网页中实现特定地点的随机图片展示
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
如何在Promise链中有效终止错误处理后的执行
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
J*aScript中在Map循环中检测并处理空数组元素
steam官方网页快速访问 steam账号注册全流程
整合Supabase认证与Django模型:跨模式迁移的解决方案
优化Django表单:提交验证失败后保留用户输入
windows10怎么关闭系统提示音_windows10彻底静音设置方法
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
J*a编写用户注册与登录功能_掌握字符串与验证逻辑
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
Mac怎么查看崩溃日志_Mac控制台错误报告分析
Python:递归比较文件夹内容并找出特定类型文件的差异
Eclipse怎么运行工程_Eclipse工程运行配置说明
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
微信群消息显示延迟如何解决 微信群消息刷新优化方法
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
Lar*el Form Request中唯一性验证在更新操作中的正确实现
React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性
Mac怎么锁定备忘录_Mac备忘录加密设置教程
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
零跑汽车11月交付量达70327台 实现连续9个月正增长
微博网页版首页入口 微博电脑端官网登录链接
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
小米14应用无法联网原因分析_小米14网络权限修复
cad如何更改注释性对象的比例_cad注释性比例调整方法
qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决
Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突
PHP中高效并行检查多链接状态的教程
J*a递归快速排序中静态变量的状态管理与陷阱
word中如何让数字纵向排列_Word数字纵向排列方法
苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】
QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用
如何使用纯J*aScript判断Input元素是否在特定类容器内
NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略
网站内容防复制粘贴的实现策略与局限性
2026春节假期票务安排_2026春节放假购票指南
蛙漫安全无毒 官方认证的绿色入口
多闪网页版在线观看免费入口_多闪官网访问入口
如何使用Go和Martini动态服务解码后的图片
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
Lar*el递归关系中排除子孙节点的策略
凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法
Flexbox布局实践:实现粘性导航栏与底部固定页脚
Golang如何优雅处理error_Golang error处理最佳实践总结


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