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

抛出自定义异常

1.自定义异常

@Getter
public class ServiceImplException extends RuntimeException {private ResultCode resultCode;public ServiceImplException(ResultCode resultCode) {this.resultCode = resultCode;}
}

 ResultCode是一个枚举类,用来枚举出现的状态码和异常信息。

@AllArgsConstructor
@Getter
public enum ResultCode {/** 定义状态码 *///操作成功SUCCESS                     (1000, "操作成功"),//服务器内部错误,友好提示ERROR                       (2000, "服务繁忙请稍后重试")
}

2.定义全局异常处理

实现代码:

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler<T> {@ExceptionHandler(HttpRequestMethodNotSupportedException.class)public Result<?>handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,HttpServletRequest request){String requestURI = request.getRequestURI();log.error("请求地址'{}',不⽀持'{}'请求", requestURI, e.getMethod());return Result.failed(ResultCode.FAILED_USER_NOT_EXISTS);}/*** 拦截运⾏时异常*/@ExceptionHandler(RuntimeException.class)public Result<?> handleRuntimeException(RuntimeException e, HttpServletRequestrequest) {String requestURI = request.getRequestURI();log.error("请求地址'{}',发⽣异常.", requestURI, e);return Result.failed(ResultCode.ERROR);}/*** 捕获service层的异常* @param e* @param request* @return*/@ExceptionHandler(ServiceImplException.class)public Result<?> ServiceImplException(ServiceImplException e, HttpServletRequest request) {String requestURI = request.getRequestURI();ResultCode resultCode = e.getResultCode();log.error("请求地址'{}',发生业务异常.", requestURI, resultCode.getMsg(),e);return Result.failed(resultCode);}/*** 系统异常*/@ExceptionHandler(Exception.class)public Result<?> handleException(Exception e, HttpServletRequest request) {String requestURI = request.getRequestURI();log.error("请求地址'{}',发⽣异常.", requestURI, e);return Result.failed (ResultCode. ERROR );}@ExceptionHandler(MethodArgumentNotValidException.class)public Result<?> handleBindException(Exception e, HttpServletRequest request) {String requestURI = request.getRequestURI();log.error("请求地址'{}',发⽣异常.", requestURI, e);return Result.failed (ResultCode.ERROR_FORMAT );}
}

注意两点:

一是需要在类上@RestControllerAdvice加上注解。

二是需要在相应的方法上加上@ExceptionHandler注解,后面跟上处理相应的异常。

最终达到的效果就是我们在服务层抛出相应的异常之后,这里会自动捕捉抛出的异常,但是抛出的异常必须是这里实现相应的逻辑的异常。

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

相关文章:

  • Linux 进程基础(三):进程是什么、进程的创建与查看
  • 文本转语音(TTS)脚本
  • 基于TurboID的邻近标记质谱(PL-MS)实验指南:从质粒构建到质谱鉴定
  • 【嵌入式电机控制#24】BLDC:霍尔测速(高难度,重理解)
  • 聊聊IT行业初创团队质量管理前期准备
  • 十二、请求响应-请求:数组参数和集合参数
  • 编码器-解码器架构:从原理到实践
  • 压缩与归档命令
  • Linux 逻辑卷管理
  • Javascript面试题及详细答案150道之(046-060)
  • Redis之Hash和List类型常用命令
  • Dubbo 3.x源码(32)—Dubbo Provider处理服务调用请求源码
  • 《算法导论》第 1 章 - 算法在计算中的作用
  • Java开发时出现的问题---语言特性与基础机制陷阱
  • 从HTTP到WebSocket:打造极速实时通讯体验
  • 安全扫描:目标主机支持RSA密钥交换问题
  • 国产化低代码平台如何筑牢企业数字化安全底座
  • 消防器材检测数据集介绍-9,600 张图片 智慧安防系统 建筑施工安全监管 AI 消防巡检机器人 自动审核系统 公共场所安全监测
  • Solidity全局变量与安全实践指南
  • [论文阅读] 人工智能 + 教学 | 从代码到职业:用机器学习预测竞赛程序员的就业潜力
  • 安全扫描:目标使用过期的TLS1.0 版协议问题
  • 【乐企板式文件】不动产销售类发票已支持
  • MySQL三大日志详解(binlog、undo log、redo log)
  • 赋能未来:数字孪生驱动能源系统智能化升级
  • 【项目实践】在系统接入天气api,根据当前天气提醒,做好plan
  • Linux(centos)安全狗
  • 【芯片设计专用执行单元:PWM如何重塑能源与智能控制】
  • sqli-labs靶场less29~less35
  • 2025.08.04 移除元素
  • 【测试工程思考】测试自动化基础能力建设