🌟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应用将更加健壮且易于维护!🎉
在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应用将更加健壮且易于维护!🎉
900

被折叠的 条评论
为什么被折叠?



