当前位置: 首页 > news >正文

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>handleValidationExceptions(
MethodArgumentNotValidExceptionex){

Maperrors=newHashMap<>();
ex.getBindingResult().getAllErrors().forEach(error->{
StringfieldName=((FieldError)error).getField();
StringerrorMessage=error.getDefaultMessage();
errors.put(fieldName,errorMessage);
});
returnResponseEntity.badRequest().body(errors);
}
```

通过合理使用`@ExceptionHandler`,我们可以让应用程序的异常处理更加集中、一致和用户友好!🎉记得结合`@ControllerAdvice`实现全局异常处理,让代码更整洁哦!✨
http://www.dtcms.com/a/601798.html

相关文章:

  • 网站建设有哪些软件卖鞋做哪个网站好
  • linux课堂练习1112
  • OpenStack 在线扩容卷超时问题
  • MySQL 慢查询优化:从定位、分析到索引调优的完整流程
  • 企业门户网站开发公司wordpress 开启多用户
  • 高权重网站代做排名公司招商型网站建设
  • C++基于websocket的多用户网页五子棋 ---- 模块介绍1
  • Java-169 Neo4j CQL 实战速查:字符串/聚合/关系与多跳查询
  • STM32电机运动控制的设计
  • 安徽福凯建设集团网站南宁网站建设是什么意思
  • TCP/IP 协议栈
  • 今天我们开始学习Linux自动化运维Ansible基础
  • .mom域名可以做网站吗wordpress woo插件
  • Skywalking运维之路(exporter状态监控)
  • Java 8 Stream API 高级实战:从数据处理到性能优化的深度解析
  • 网站建设目标个人博客dwwordpress微信付费
  • 梯度提升树与随机森林对比详解以及python实现
  • C语言编译器推荐 | 选择适合你的开发工具
  • 网站域名和空间网站产品优化方案
  • java.net.http 包详解
  • K8s Service核心功能:稳定访问与负载均衡
  • 有向图的可达性分析
  • 网站开发西安网页设计基础项目考核
  • INT305 Machine Learning 机器学习 Pt.8 Bagging 和 Boosting
  • React+Ant design
  • C++四种类型转换cast,其在参数传递时的作用
  • 什么网站可以做图赚钱网站建设主体设计要求
  • 云手机的核心价值
  • L10_参数验证
  • 免费网站制作手机软件的appaso排名优化