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

spring boot 统一异常处理

在 Spring Boot 应用中实现统一异常处理是非常重要的,它可以帮助我们更好地管理和响应应用程序中的错误。通过使用 @ControllerAdvice@ExceptionHandler 注解,我们可以创建一个全局的异常处理器来捕获并处理不同类型的异常。

步骤 1: 创建一个异常处理类

首先,我们需要创建一个带有 @ControllerAdvice 注解的类。这个注解使得该类可以作为全局异常处理器,对所有控制器方法中的异常进行处理。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;@ControllerAdvice
public class GlobalExceptionHandler {// 处理特定异常@ExceptionHandler(value = {NullPointerException.class, IllegalArgumentException.class})@ResponseStatus(HttpStatus.BAD_REQUEST)public ResponseEntity<String> handleException(Exception e) {return new ResponseEntity<>("Error: " + e.getMessage(), HttpStatus.BAD_REQUEST);}// 处理所有未捕获的异常@ExceptionHandler(value = Exception.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)public ResponseEntity<String> handleAllExceptions(Exception e) {return new ResponseEntity<>("An unexpected error occurred: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);}
}

步骤 2: 定义自定义异常(可选)

有时候,你可能需要定义自己的异常类型,以便更精确地控制应用的行为。例如:

public class ResourceNotFoundException extends RuntimeException {public ResourceNotFoundException(String message) {super(message);}
}

然后,在你的异常处理类中添加一个新的方法来专门处理这种异常:

@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) {return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}

步骤 3: 在控制器中抛出异常

在你的控制器中,你可以根据业务逻辑的需要抛出这些异常。例如:

@RestController
public class UserController {@GetMapping("/users/{id}")public User getUser(@PathVariable Long id) {User user = userRepository.findById(id).orElse(null);if (user == null) {throw new ResourceNotFoundException("User not found with id: " + id);}return user;}
}

总结

通过以上步骤,你可以为 Spring Boot 应用程序设置一个强大的异常处理机制。这不仅有助于提高用户体验,还可以确保应用程序更加健壮和易于维护。使用 @ControllerAdvice@ExceptionHandler 是实现这一目标的有效方式。

http://www.lryc.cn/news/478535.html

相关文章:

  • 跟着小土堆学习pytorch(六)——神经网络的基本骨架(nn.model)
  • 数字化落地过程中的研发效能治理如何开展?
  • Windows安装配置node.js
  • Javaweb梳理9——JDBC
  • 逆向CTF入门(如何找main)
  • c语言归并排序
  • 碳化硅陶瓷膜的特性
  • 机器学习(三)——决策树(附核心思想、重要算法、概念(信息熵、基尼指数、剪枝处理)及Python源码)
  • 良心无广,这五款电脑软件堪称必备,最后一个比快播都猛
  • Vue3中实现原生CSS完成圆形按钮点击粒子效果和定点旋转动画
  • 百度网盘 服务器开小差了
  • 数据分析师招聘要求
  • 【C语言】实战-力扣题库:回文链表
  • Centos安装Minio
  • 二叉树的基本概念和底层实现
  • GIF图片格式详解(三)
  • 类和对象相关题
  • Word大珩助手:超大数字怎么读?35位数字?69位数字?
  • 阿里云k8s-master部署CNI网络插件遇到的问题
  • 【LwIP源码学习4】主线程tcpip_thread
  • 求猫用宠物空气净化器推荐,有没有吸毛强、噪音小的产品
  • pycharm中python控制台出现CommandNotFoundError: No command ‘conda run‘.
  • 架构师备考-架构基本概念
  • 信奥赛C++知识点
  • 高并发内存池扩展 -- 处理大内存,优化释放时需要传入空间大小,加入定长内存池,存放映射关系的容器的锁机制,优化性能(基数树,优势,优化前后对比)
  • Composite(组合)
  • 有Bootloader,为什么还要BROM?
  • 【MATLAB代码】CV和CA模型组成的IMM(滤波方式为UKF),可复制粘贴源代码
  • 【网络】传输层协议TCP(下)
  • 服务器数据恢复—EVA存储故障导致上层应用不可用的数据恢复案例