Spring 中的 @ExceptionHandler 注解详解与应用

🌟Spring中的@ExceptionHandler注解详解与应用🌟

在Spring框架中,异常处理是构建健壮应用的关键🔑。`@ExceptionHandler`注解提供了一种优雅的方式来集中处理控制器层抛出的异常,避免代码重复,提升可维护性✨。

📌基本用法

`@ExceptionHandler`通常与`@ControllerAdvice`或直接在`@Controller`中使用,用于捕获特定异常并返回自定义响应。

```java
@RestController
publicclassUserController{

@GetMapping("/user/{id}")
publicUsergetUser(@PathVariableLongid){
if(id==0){
thrownewIllegalArgumentException("无效的用户ID");//💥抛出异常
}
returnuserService.findById(id);
}

//🎯处理当前Controller的特定异常
@ExceptionHandler(IllegalArgumentException.class)
publicResponseEntityhandleIllegalArgument(IllegalArgumentExceptionex){
returnResponseEntity.badRequest().body(ex.getMessage());//📤返回400错误
}
}
```

🌍全局异常处理

通过`@ControllerAdvice`实现全局异常处理,避免在每个Controller中重复定义:

```java
@ControllerAdvice
publicclassGlobalExceptionHandler{

//🔧处理所有IllegalArgumentException
@ExceptionHandler(IllegalArgumentException.class)
publicResponseEntityhandleGlobalIllegalArgument(IllegalArgumentExceptionex){
returnResponseEntity.badRequest().body("全局处理:"+ex.getMessage());
}

//⚡处理所有未捕获的异常
@ExceptionHandler(Exception.class)
publicResponseEntityhandleAllExceptions(Exceptionex){
returnResponseEntity.internalServerError().body("服务器错误:"+ex.getMessage());
}
}
```

💡高级特性

1.多异常捕获:一个方法可处理多种异常类型。
```java
@ExceptionHandler({NullPointerException.class,ArithmeticException.class})
publicResponseEntityhandleMultipleExceptions(Exceptionex){
returnResponseEntity.badRequest().body("复合异常:"+ex.getMessage());
}
```

2.注入请求对象:可通过参数获取`HttpServletRequest`等上下文对象。
```java
@ExceptionHandler(RuntimeException.class)
publicResponseEntityhandleRuntimeException(
RuntimeExceptionex,
HttpServletRequestrequest
){
Stringpath=request.getRequestURI();
returnResponseEntity.status(500).body("路径"+path+"发生错误:"+ex.getMessage());
}
```

🚀应用场景

-API统一错误响应:标准化错误格式(如JSON)。
-日志记录:在异常处理中集成日志上报。
-权限校验:拦截无权限访问的异常。

通过合理使用`@ExceptionHandler`,你的Spring应用将更加健壮且易于维护!🎉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值