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

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

什么是@ExceptionHandler?🤔

`@ExceptionHandler`是Spring框架提供的一个强大注解,用于集中处理控制器(Controller)中抛出的异常。它可以帮助我们优雅地处理错误,避免将异常直接暴露给客户端。

```java
@ControllerAdvice
publicclassGlobalExceptionHandler{

@ExceptionHandler(Exception.class)
publicResponseEntityhandleException(Exceptionex){
returnResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("发生错误:"+ex.getMessage());
}
}
```

核心特性✨

1.异常类型匹配:可以指定处理的异常类型
2.返回值灵活:可以返回各种类型的响应
3.优先级机制:更具体的异常处理优先

```java
@ExceptionHandler({NullPointerException.class,IllegalArgumentException.class})
publicResponseEntityhandleSpecificExceptions(Exceptionex){
ErrorResponseerror=newErrorResponse("参数错误",ex.getMessage());
returnResponseEntity.badRequest().body(error);
}
```

实际应用场景🚀

1.统一错误响应格式:
```java
@ExceptionHandler(MethodArgumentNotValidException.class)
publicResponseEntityhandleValidationExceptions(
MethodArgumentNotValidExceptionex){

Listerrors=ex.getBindingResult()
.getFieldErrors()
.stream()
.map(FieldError::getDefaultMessage)
.collect(Collectors.toList());

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

2.自定义业务异常处理:
```java
@ExceptionHandler(BusinessException.class)
publicResponseEntityhandleBusinessException(
BusinessExceptionex){

returnResponseEntity.status(ex.getHttpStatus())
.body(newErrorResponse(ex.getErrorCode(),ex.getMessage()));
}
```

最佳实践💡

-使用`@ControllerAdvice`创建全局异常处理器
-按异常类型分层处理
-记录异常日志
-返回用户友好的错误信息

```java
@ControllerAdvice
publicclassGlobalExceptionHandler{

privatestaticfinalLoggerlogger=LoggerFactory.getLogger(GlobalExceptionHandler.class);

@ExceptionHandler(Exception.class)
publicResponseEntityhandleAllExceptions(Exceptionex,WebRequestrequest){
logger.error("发生未处理异常:",ex);
returnResponseEntity.internalServerError()
.body(newErrorResponse("SERVER_ERROR","系统繁忙,请稍后再试"));
}
}
```

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值