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

55、错误处理-【源码流程】几种异常处理原理

55、错误处理-【源码流程】几种异常处理原理

#### 自定义错误页

- **原理**:

    - 在项目中定义特定的错误页面,如`error/404.html`、`error/5xx.html`等。

    - 当系统发生相应错误时,服务器会自动查找并返回对应的错误页面。

- **流程**:

    1. 发生错误,服务器根据错误状态码(如404、500等)查找对应的错误页面。

    2. 如果找到精确匹配的错误页面,则返回该页面;否则,返回通用的`4xx.html`或`5xx.html`页面。

    3. 如果都没有匹配的错误页面,则触发默认的白页(空白页面)。

#### `@ControllerAdvice` + `@ExceptionHandler`处理全局异常

- **原理**:

    - 使用`@ControllerAdvice`注解标记一个类,作为全局异常处理的控制器。

    - 在该类中使用`@ExceptionHandler`注解标记方法,用于处理特定类型的异常。

- **流程**:

    1. 程序运行过程中发生异常。

    2. Spring框架的`ExceptionHandlerExceptionResolver`检测到异常。

    3. 根据异常类型查找`@ControllerAdvice`类中匹配的`@ExceptionHandler`方法。

    4. 执行匹配的`@ExceptionHandler`方法,返回相应的处理结果(如视图、JSON数据等)。

- **示例**:

    ```java

    @Slf4j

    @ControllerAdvice

    public class GlobalExceptionHandler {

    

        @ExceptionHandler({ArithmeticException.class, NullPointerException.class})

        public String handleArithmeticException(Exception e) {

            log.error("发生异常:{}", e);

            return "error"; // 跳转到错误页面

        }

    

    }

    ```

#### `@ResponseStatus` + 自定义异常

- **原理**:

    - 创建一个自定义异常类,并使用`@ResponseStatus`注解标记,指定HTTP状态码和原因。

    - 当程序抛出该自定义异常时,Spring框架会自动设置响应的HTTP状态码和原因。

- **流程**:

    1. 程序运行过程中,满足特定条件时手动抛出带有`@ResponseStatus`注解的自定义异常。

    2. Spring框架的`ResponseStatusExceptionResolver`检测到该异常。

    3. 根据`@ResponseStatus`注解的信息,设置响应的HTTP状态码和原因。

    4. 返回对应的错误信息给客户端。

- **示例**:

    ```java

    @ResponseStatus(value = HttpStatus.FORBIDDEN, reason = "用户数量太多")

    public class UserTooManyException extends RuntimeException {

        // 构造方法等

    }

    

    @Controller

    public class UserController {

    

        @GetMapping("/register")

        public String register() {

            if (userCount > MAX_USER_COUNT) {

                throw new UserTooManyException();

            }

            // ...

        }

    

    }

    ```

#### Spring自带异常处理

- **原理**:

    - Spring框架内置了一些异常处理器,如`DefaultHandlerExceptionResolver`,用于处理Spring框架自身抛出的异常。

- **流程**:

    1. 程序运行过程中,Spring框架检测到自身抛出的异常(如`MissingServletRequestParameterException`等)。

    2. `DefaultHandlerExceptionResolver`或其他相应的异常处理器处理该异常。

    3. 根据异常类型,设置响应的HTTP状态码和错误信息。

    4. 返回错误响应给客户端。

通过以上几种方式,可以有效地处理程序中的各种异常,提高系统的健壮性和用户体验。

http://www.xdnf.cn/news/997579.html

相关文章:

  • 网络安全之RCE简单分析
  • 基于OpenCV实现视频运动目标检测与跟踪
  • hot100滑动窗口无重复字符串
  • 超简单部署离线语音合成TTS和语音识别
  • wpf 解决DataGridTemplateColumn中width绑定失效问题
  • 基于Django的购物系统
  • DevEco Studio 报错 “too many restarts of gpu-process (jcef)“
  • pyspark 初试
  • Spring 路由匹配机制详解:时间复杂度从 O(n) 降至 O(log n)
  • 【Zephyr 系列 20】BLE 模块产线测试系统设计:快速校验、参数写入、自动识别的完整方案
  • Package vs. Directory (包 vs. 目录)
  • HarmonyOS运动开发:打造便捷的静态快捷菜单
  • 以前在服务器启动了docker,现在不需要了,为了安全,去掉docker服务@Ubuntu
  • Linux 基本命令
  • GO后端开发内存管理及参考答案
  • 没有宝塔面板的服务器上的WordPress网站打包下载到本地?
  • 动态多目标进化算法:MOEA/D-SVR求解CEC2018(DF1-DF14),提供完整MATLAB代码
  • 数字图像处理与OpenCV初探
  • 机器学习 [白板推导](五)[支持向量机]
  • uni-app隐藏返回按钮
  • VAS5081电动工具专用3-8节串联电池监控芯片奇力科技
  • 深入理解常用依存关系标签
  • 常见的几种排序算法
  • ​​MPI + OpenMP 环境配置指南(Windows/Linux)​
  • 【C++】继承和派生
  • 【靶场】upload-labs-文件上传漏洞闯关
  • Java面试题020:一文深入了解微服务之负载均衡Feign
  • docker-Dockerfile 配置
  • EMS企业微电网能效管理 + IBMS智能化集成系统:双擎驱动企业绿色低碳转型
  • 快速搭建运行Django第一个应用—投票