Spring Boot 全局异常捕捉,自定义异常并统一返回

本文展示了如何在Spring Boot中创建一个全局异常处理器`ExceptionController`,使用`@RestControllerAdvice`注解实现对HttpRequestMethodNotSupportedException、RuntimeException以及其他未知异常的捕获,并通过`MessageResult`统一返回错误信息。通过这种方式,可以更有效地管理和定制应用程序的异常反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面代码可直接拷在项目内运行即可,MessageResult类为一个统一返回类

 

/**
* 自定义异常处理器

* @author 问梦杀帝
*
*/
@RestControllerAdvice
public class ExceptionController {
private static final Logger log = LoggerFactory.getLogger(ExceptionController.class);
MessageResult<String> result = new MessageResult<String>();

/**
* 请求方式不支持
*/
@ExceptionHandler({ HttpRequestMethodNotSupportedException.class })
public MessageResult<String> handleException(HttpRequestMethodNotSupportedException e) {
log.error(e.getMessage(), e);
result.setResultCode(500);
result.setResultMessage("不支持' " + e.getMethod() + "'请求");
return result;
}

/**
* 拦截未知的运行时异常
*/
@ExceptionHandler(RuntimeException.class)
public MessageResult<String> notFount(RuntimeException e) {
log.error("运行时异常:", e);
result.setResultCode(500);
result.setResultMessage("运行时异常:" + e.

### 如何在 Spring Boot 中实现全局异常处理 #### 使用 `@RestControllerAdvice` 和 `@ExceptionHandler` 为了实现在整个应用程序中统一处理异常,推荐使用带有 `@RestControllerAdvice` 注解的。此不仅能够拦截控制器层发生的异常情况,还可以通过指定特定型的异常来定制化错误响应逻辑[^2]。 当遇到未被捕获的异常时,Spring 将自动调用匹配的 `@ExceptionHandler` 方法来进行处理。这使得开发者可以集中管理和定义各种可能出现的问题场景下的行为模式,从而简化代码结构增强可读性和维护性[^1]。 #### 添加必要的依赖项 确保项目已经引入了用于构建Web应用所需的库文件: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 此部分配置应放置于项目的 `pom.xml` 文件内以支持后续操作[^3]。 #### 创建全局异常处理器 下面展示了一个简单的例子,说明怎样创建一个专门负责捕捉所有运行期异常(`RuntimeException`) 的组件,向客户端发送标准化的消息体作为回应: ```java import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(RuntimeException.class) public ResponseEntity<String> handleRuntimeExceptions(final RuntimeException e){ // 记录日志信息 (此处省略具体实现) return new ResponseEntity<>("An unexpected error occurred", HttpStatus.INTERNAL_SERVER_ERROR); } } ``` 上述代码片段展示了如何利用 `@RestControllerAdvice` 来标记一个全局异常处理器,以及如何运用 `@ExceptionHandler` 对某些特定异常作出反应。对于 REST API 而言,返回 `ResponseEntity<T>` 是一种常见法,因为它允许灵活控制 HTTP 响应的状态码和主体内容[^4]。 #### 自定义异常视图 除了提供 JSON 或 XML 形式的API级反馈外,有时也需要针对浏览器访问准备HTML格式的友好提示页。为此目的,可以通过扩展 `BasicErrorController` 或者覆盖其默认的行为来满足特殊需求[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值