news 2026/7/30 16:33:15

Spring Boot统一异常处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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")); } }

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 2:50:48

Apache Mesos集群运维实战:故障恢复与版本管理完全指南

Apache Mesos集群运维实战&#xff1a;故障恢复与版本管理完全指南 【免费下载链接】mesos Apache Mesos 项目地址: https://gitcode.com/gh_mirrors/mesos2/mesos 在现代分布式系统中&#xff0c;Mesos集群维护是确保业务连续性的关键环节。本指南将深入解析Mesos集群运…

作者头像 李华
网站建设 2026/7/26 9:15:15

探索式测试的Session管理法:提升软件测试效率与可追溯性

探索式测试作为一种强调测试者自主性与创造性的软件测试方法&#xff0c;在快速迭代的现代开发环境中日益重要。然而&#xff0c;其非结构化的特性可能导致测试过程难以追踪和评估。Session管理法应运而生&#xff0c;它通过引入时间盒&#xff08;Time-boxed&#xff09;会话和…

作者头像 李华
网站建设 2026/7/30 9:22:49

购物省钱参考:爱创猫电商优惠券领取方式

外卖网购“隐形开支”太多&#xff1f;这份极致省钱手册&#xff0c;让你每月轻松多省几百块你有没有算过&#xff0c;自己每个月花在外卖和网购上的钱有多少&#xff1f;打开手机账单&#xff0c;那些十几二十块的外卖订单&#xff0c;几十上百的“凑单”商品&#xff0c;看似…

作者头像 李华
网站建设 2026/7/30 5:58:39

12、Red Hat Enterprise Linux硬件分析与管理指南

Red Hat Enterprise Linux硬件分析与管理指南 1. RPM包安装与信息查看 在安装示例包时,如果未安装 vpnc 包,会显示如下错误: error: Failed dependencies: vpnc is needed by startvpn-1.1-1.noarch若要强制安装该包以测试从示例中构建的软件包,可使用以下命令: r…

作者头像 李华
网站建设 2026/7/27 15:31:53

35、Linux 内核监控与调试:NUMA、AltSysRq 及 Kdump 全解析

Linux 内核监控与调试:NUMA、AltSysRq 及 Kdump 全解析 在 Linux 系统的运维和管理中,对内核的监控与调试至关重要。本文将深入探讨 NUMA 统计信息、AltSysRq 系统请求以及 Kdump 内核转储工具的使用,帮助你更好地理解和管理 Linux 内核。 1. NUMA 统计信息 NUMA(Non-Un…

作者头像 李华
网站建设 2026/7/30 3:00:01

DataEase开源BI工具完整指南:从零开始的数据可视化之旅

DataEase开源BI工具完整指南&#xff1a;从零开始的数据可视化之旅 【免费下载链接】DataEase 人人可用的开源 BI 工具 项目地址: https://gitcode.com/feizhiyun/dataease DataEase是一款人人可用的开源BI工具&#xff0c;让数据分析变得简单直观。作为一款基于GPLv3协…

作者头像 李华