news 2026/4/23 15:03:00

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/4/23 12:12:18

Apache Mesos运维终极指南:10个核心维护策略与最佳实践

Apache Mesos运维终极指南&#xff1a;10个核心维护策略与最佳实践 【免费下载链接】mesos Apache Mesos 项目地址: https://gitcode.com/gh_mirrors/mesos2/mesos Apache Mesos运维管理是确保大规模分布式系统稳定运行的关键环节。作为领先的集群资源管理器&#xff0c…

作者头像 李华
网站建设 2026/4/22 18:10:56

深入理解C语言if语句的汇编实现原理:从条件判断到底层跳转

引言&#xff1a;代码背后的机器思维在高级语言中&#xff0c;一个简单的if语句隐藏着计算机底层丰富的执行逻辑。当我们写下if (a > b)时&#xff0c;编译器究竟是如何将其转化为CPU能理解的指令的&#xff1f;这篇文章将带你深入探究C语言条件判断与汇编跳转指令之间的精妙…

作者头像 李华
网站建设 2026/4/23 10:46:50

缓存集群性能跃迁:从传统轮询到智能路由的架构革命

缓存集群性能跃迁&#xff1a;从传统轮询到智能路由的架构革命 【免费下载链接】memcached memcached development tree 项目地址: https://gitcode.com/gh_mirrors/mem/memcached 当你的Memcached集群扩展到5台以上服务器时&#xff0c;是否注意到缓存命中率从85%骤降到…

作者头像 李华
网站建设 2026/4/23 13:43:44

安全测试公开课来啦!带你掌握安全测试的核心实战技能

在数字化浪潮席卷的今天&#xff0c;一个看似微小的安全漏洞&#xff0c;就可能导致企业数据泄露、业务中断&#xff0c;甚至造成无法挽回的品牌声誉损失。作为开发、测试或运维人员的你&#xff0c;是否也曾感到焦虑&#xff1a; 面对层出不穷的安全事件&#xff0c;不知从何防…

作者头像 李华
网站建设 2026/4/23 11:46:05

信令是什么?为什么 WebRTC 需要信令?

信令是什么?为什么 WebRTC 需要信令? 本文是 WebRTC 系列专栏的第六篇,也是第二部分"信令与会话管理"的开篇。我们将深入探讨信令的概念、作用以及如何设计自己的信令服务器。 目录 什么是信令信令不是 WebRTC 标准的一部分信令传输的内容信令传输方式信令服务器设…

作者头像 李华
网站建设 2026/4/23 13:43:53

2026毕设ssm+vue基于框架的宠物商城平台论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景 关于动漫垂直社区的研究&#xff0c;现有成果主要以 B 站、A 站等综合视频平台为主&#xff0c;专门针对“动漫图文分享轻社交…

作者头像 李华