当前位置: 首页 > news >正文

Spring Boot统一异常处理

在Spring Boot中实现统一异常处理主要通过@ControllerAdvice@ExceptionHandler注解组合完成。这种方式能集中处理控制器层抛出的异常,避免在每个方法中重复编写异常处理代码。

基础实现步骤

创建全局异常处理类并添加@ControllerAdvice注解。这个类可以包含多个异常处理方法:

@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<ErrorResponse> handleException(Exception ex) { ErrorResponse error = new ErrorResponse( HttpStatus.INTERNAL_SERVER_ERROR.value(), "Internal Server Error", ex.getMessage() ); return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR); } }

定义统一的错误响应体结构:

@Data @AllArgsConstructor public class ErrorResponse { private int status; private String error; private String message; private String timestamp = LocalDateTime.now().toString(); }

处理特定异常类型

针对不同的异常类型定义具体的处理方法:

@ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<ErrorResponse> handleResourceNotFound( ResourceNotFoundException ex) { ErrorResponse error = new ErrorResponse( HttpStatus.NOT_FOUND.value(), "Resource Not Found", ex.getMessage() ); return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); } @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity<ErrorResponse> handleValidationExceptions( MethodArgumentNotValidException ex) { List<String> errors = ex.getBindingResult() .getFieldErrors() .stream() .map(FieldError::getDefaultMessage) .collect(Collectors.toList()); ErrorResponse error = new ErrorResponse( HttpStatus.BAD_REQUEST.value(), "Validation Error", errors.toString() ); return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); }

自定义异常类

创建业务特定的异常类型:

public class BusinessException extends RuntimeException { private final ErrorCode errorCode; public BusinessException(ErrorCode errorCode, String message) { super(message); this.errorCode = errorCode; } public ErrorCode getErrorCode() { return errorCode; } }

对应的异常处理:

@ExceptionHandler(BusinessException.class) public ResponseEntity<ErrorResponse> handleBusinessException( BusinessException ex) { ErrorResponse error = new ErrorResponse( ex.getErrorCode().getCode(), ex.getErrorCode().name(), ex.getMessage() ); return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); }

响应内容协商支持

确保异常处理支持多种响应格式(JSON/XML等):

@ControllerAdvice @RequestMapping(produces = {"application/json", "application/xml"}) public class GlobalExceptionHandler { // 处理方法保持不变 }

日志记录集成

在异常处理中加入日志记录:

@ExceptionHandler(Exception.class) public ResponseEntity<ErrorResponse> handleException(Exception ex) { logger.error("Unexpected error occurred", ex); // 其余处理逻辑 }

测试验证方法

编写测试用例验证异常处理:

@SpringBootTest @AutoConfigureMockMvc class ExceptionHandlerTest { @Autowired private MockMvc mockMvc; @Test void testResourceNotFound() throws Exception { mockMvc.perform(get("/api/resource/999")) .andExpect(status().isNotFound()) .andExpect(jsonPath("$.error").value("Resource Not Found")); } }

这种实现方式提供了清晰的异常处理结构,使业务代码保持整洁,同时为客户端返回标准化的错误响应。根据项目需求可以进一步扩展,如添加多语言支持、更详细的错误分类等。

http://www.cnnetsun.cn/news/82388.html

相关文章:

  • Apache Mesos集群运维实战:故障恢复与版本管理完全指南
  • 探索式测试的Session管理法:提升软件测试效率与可追溯性
  • 购物省钱参考:爱创猫电商优惠券领取方式
  • 12、Red Hat Enterprise Linux硬件分析与管理指南
  • 35、Linux 内核监控与调试:NUMA、AltSysRq 及 Kdump 全解析
  • DataEase开源BI工具完整指南:从零开始的数据可视化之旅
  • Gutenberg性能优化终极指南:零成本加速WordPress编辑器
  • ag-ui与LangGraph集成终极指南:构建企业级AI工作流的完整教程
  • 2026毕设ssm+vue基于架构的校园二手物品交易论文+程序
  • 手机强制开启USB调试模式终极指南:轻松解决设备连接难题
  • DataEase开源BI工具完整安装配置指南:从零开始快速部署
  • ReClassEx终极指南:免费开源的内存逆向分析神器
  • 物联网平台前端技术重构:从技术困境到用户体验的完美蜕变
  • 动态资源池化技术:让高价值软件许可“流动”起来的关键策略
  • 24、网络服务中的 SSH 与代理服务器使用指南
  • 2025护网蓝队面试题库,参加护网看这个就够了!
  • 3步精通FLAN-T5 XL:从零到多语言AI实战指南
  • Kubernetes环境下Hadoop存储配置的7个关键问题及解决方案
  • Moonlight安卓串流:5分钟实现手机玩PC游戏的终极指南
  • 40、Postfix性能测试、故障排查及相关标准参考
  • 41、邮件服务器配置与优化全解析
  • 如何评价 Nano Banana Pro?
  • 如何快速掌握Gemma模型转换:面向开发者的终极指南
  • 前端UI框架汇总,零基础入门到精通,收藏这篇就够了
  • 前端开发者必知的AI核心概念与技术栈全解析,收藏这篇就够了
  • keyboard-layout-editor 终极指南:从零开始打造你的专属键盘
  • 3个Vim效率插件对比:让你的编辑速度翻倍
  • Accelerate分布式推理引擎技术解析:从原理到工程实践
  • 写论文软件哪个好?别试了,宏智树AI已经把“毕业级论文”标准答案写好了
  • SLAM地图持久化技术深度解析:3种创新方案解决建图数据丢失难题