Spring 中的 @ExceptionHandler 注解详解与应用
🌟Spring中的@ExceptionHandler注解详解与应用🌟
在Spring框架中,异常处理是构建健壮应用程序的关键部分。`@ExceptionHandler`注解为我们提供了一种优雅的方式来处理控制器中抛出的异常。让我们深入了解这个强大的工具!🚀
🔍@ExceptionHandler基础
`@ExceptionHandler`是一个方法级别的注解,用于在控制器(Controller)或控制器通知类(`@ControllerAdvice`)中声明异常处理方法:
```java
@Controller
publicclassMyController{
@ExceptionHandler(MyCustomException.class)
publicResponseEntityhandleMyCustomException(MyCustomExceptionex){
returnResponseEntity
.status(HttpStatus.BAD_REQUEST)
.body("出错啦:"+ex.getMessage());
}
}
```
💡核心特性
1.异常匹配:可以指定处理的异常类型,包括其子类
2.灵活返回:可以返回`ResponseEntity`、`ModelAndView`或普通对象
3.多异常处理:一个方法可以处理多种异常
```java
@ExceptionHandler({NullPointerException.class,IllegalArgumentException.class})
publicResponseEntityhandleMultipleExceptions(Exceptionex){
//处理逻辑...
}
```
🎯最佳实践
1.使用@ControllerAdvice:创建全局异常处理器
```java
@ControllerAdvice
publicclassGlobalExceptionHandler{
@ExceptionHandler(Exception.class)
publicResponseEntityhandleAllExceptions(Exceptionex){
ErrorResponseerror=newErrorResponse(
"SERVER_ERROR",
"系统繁忙,请稍后再试"
);
returnResponseEntity.status(500).body(error);
}
}
```
2.自定义异常类:创建业务特定的异常
```java
publicclassResourceNotFoundExceptionextendsRuntimeException{
publicResourceNotFoundException(Stringmessage){
super(message);
}
}
```
🌈实际应用场景
-RESTAPI:返回结构化的错误响应
-传统MVC:跳转到错误页面
-表单验证:处理验证异常并返回友好提示
```java
@ExceptionHandler(MethodArgumentNotValidException.class)
publicResponseEntity
在Spring框架中,异常处理是构建健壮应用程序的关键部分。`@ExceptionHandler`注解为我们提供了一种优雅的方式来处理控制器中抛出的异常。让我们深入了解这个强大的工具!🚀
🔍@ExceptionHandler基础
`@ExceptionHandler`是一个方法级别的注解,用于在控制器(Controller)或控制器通知类(`@ControllerAdvice`)中声明异常处理方法:
```java
@Controller
publicclassMyController{
@ExceptionHandler(MyCustomException.class)
publicResponseEntityhandleMyCustomException(MyCustomExceptionex){
returnResponseEntity
.status(HttpStatus.BAD_REQUEST)
.body("出错啦:"+ex.getMessage());
}
}
```
💡核心特性
1.异常匹配:可以指定处理的异常类型,包括其子类
2.灵活返回:可以返回`ResponseEntity`、`ModelAndView`或普通对象
3.多异常处理:一个方法可以处理多种异常
```java
@ExceptionHandler({NullPointerException.class,IllegalArgumentException.class})
publicResponseEntityhandleMultipleExceptions(Exceptionex){
//处理逻辑...
}
```
🎯最佳实践
1.使用@ControllerAdvice:创建全局异常处理器
```java
@ControllerAdvice
publicclassGlobalExceptionHandler{
@ExceptionHandler(Exception.class)
publicResponseEntityhandleAllExceptions(Exceptionex){
ErrorResponseerror=newErrorResponse(
"SERVER_ERROR",
"系统繁忙,请稍后再试"
);
returnResponseEntity.status(500).body(error);
}
}
```
2.自定义异常类:创建业务特定的异常
```java
publicclassResourceNotFoundExceptionextendsRuntimeException{
publicResourceNotFoundException(Stringmessage){
super(message);
}
}
```
🌈实际应用场景
-RESTAPI:返回结构化的错误响应
-传统MVC:跳转到错误页面
-表单验证:处理验证异常并返回友好提示
```java
@ExceptionHandler(MethodArgumentNotValidException.class)
publicResponseEntity
