Spring中的@ExceptionHandler注解详解与应用✨
什么是@ExceptionHandler?🤔
`@ExceptionHandler`是Spring框架提供的一个强大注解,用于在控制器(Controller)级别处理异常。它允许我们在单个控制器中定义异常处理方法,避免编写重复的异常处理代码。
```java
@Controller
publicclassMyController{
@ExceptionHandler(MyCustomException.class)
publicResponseEntityhandleMyCustomException(MyCustomExceptionex){
returnResponseEntity
.status(HttpStatus.BAD_REQUEST)
.body("出错啦:"+ex.getMessage());
}
}
```
核心特性🔍
1.方法级注解:可以标注在控制器方法上
2.异常类型匹配:可以指定处理的异常类
3.灵活返回值:支持返回多种类型(ModelAndView、ResponseEntity等)
实际应用场景🚀
1.处理特定异常
```java
@ExceptionHandler(ResourceNotFoundException.class)
publicResponseEntityhandleResourceNotFound(
ResourceNotFoundExceptionex){
ErrorResponseerror=newErrorResponse(
"NOT_FOUND",
ex.getMessage());
returnnewResponseEntity<>(error,HttpStatus.NOT_FOUND);
}
```
2.处理多种异常
```java
@ExceptionHandler({NullPointerException.class,IllegalArgumentException.class})
publicResponseEntityhandleBadRequests(Exceptionex){
returnResponseEntity
.badRequest()
.body("请求参数有问题:"+ex.getMessage());
}
```
最佳实践💡
1.结合@ControllerAdvice使用:可以将异常处理逻辑集中到单独类中
```java
@ControllerAdvice
publicclassGlobalExceptionHandler{
@ExceptionHandler(Exception.class)
publicResponseEntityhandleAllExceptions(Exceptionex){
returnResponseEntity
.internalServerError()
.body("服务器开小差了:"+ex.getMessage());
}
}
```
2.自定义错误响应:返回结构化的错误信息而非简单字符串
```java
@ExceptionHandler(MethodArgumentNotValidException.class)
protectedResponseEntity
什么是@ExceptionHandler?🤔
`@ExceptionHandler`是Spring框架提供的一个强大注解,用于在控制器(Controller)级别处理异常。它允许我们在单个控制器中定义异常处理方法,避免编写重复的异常处理代码。
```java
@Controller
publicclassMyController{
@ExceptionHandler(MyCustomException.class)
publicResponseEntityhandleMyCustomException(MyCustomExceptionex){
returnResponseEntity
.status(HttpStatus.BAD_REQUEST)
.body("出错啦:"+ex.getMessage());
}
}
```
核心特性🔍
1.方法级注解:可以标注在控制器方法上
2.异常类型匹配:可以指定处理的异常类
3.灵活返回值:支持返回多种类型(ModelAndView、ResponseEntity等)
实际应用场景🚀
1.处理特定异常
```java
@ExceptionHandler(ResourceNotFoundException.class)
publicResponseEntityhandleResourceNotFound(
ResourceNotFoundExceptionex){
ErrorResponseerror=newErrorResponse(
"NOT_FOUND",
ex.getMessage());
returnnewResponseEntity<>(error,HttpStatus.NOT_FOUND);
}
```
2.处理多种异常
```java
@ExceptionHandler({NullPointerException.class,IllegalArgumentException.class})
publicResponseEntityhandleBadRequests(Exceptionex){
returnResponseEntity
.badRequest()
.body("请求参数有问题:"+ex.getMessage());
}
```
最佳实践💡
1.结合@ControllerAdvice使用:可以将异常处理逻辑集中到单独类中
```java
@ControllerAdvice
publicclassGlobalExceptionHandler{
@ExceptionHandler(Exception.class)
publicResponseEntityhandleAllExceptions(Exceptionex){
returnResponseEntity
.internalServerError()
.body("服务器开小差了:"+ex.getMessage());
}
}
```
2.自定义错误响应:返回结构化的错误信息而非简单字符串
```java
@ExceptionHandler(MethodArgumentNotValidException.class)
protectedResponseEntity
900

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



