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

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)
protectedResponseEntityhandleMethodArgumentNotValid(
MethodArgumentNotValidExceptionex){
Listerrors=ex.getBindingResult()
.getFieldErrors()
.stream()
.map(x->x.getField()+":"+x.getDefaultMessage())
.collect(Collectors.toList());

returnResponseEntity
.badRequest()
.body(newApiError("验证失败",errors));
}
```

通过合理使用`@ExceptionHandler`,我们可以构建更加健壮和用户友好的Spring应用!🎉
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值