SpringMvc之@ExceptionHandle

doublespring注解

记录异常处理方式

异常分类

Throwable是错误的基类,所有的错误异常都是基于它,主要分为以下2类

  1. Error(错误: 程序根本跑不起来)
  2. Exception (异常: 运行的异常)
    1. CheckedException (可以被检测到的异常,必须要求代码里面来处理,如果不处理那么程序是编译不过的)
    2. RuntimeException (运行时的异常,也称为 unchecked)

CheckedException 和 RuntimeException 的区别,主要是 CheckedException 必须要求代码里面来处理,如果不处理那么程序是编译不过的。

异常定义

  • 对于能处理的异常一般都定义为 CheckedException 类型,如: 读取文件读取不到。
  • 对于无能为力的异常一般都定义为 RuntimeException 类型,如:根据用户输入查询数据库发生的异常

已知异常、未知异常

分界点在于程序员自己本身有没有处理以及在编写程序的时候有没有思考过会出现的异常。

spring boot 统一处理异常

通过 @ControllerAdvice 和 @ExceptionHandle 2个注解来完成。

@RestController public class Mytest { @GetMapping("/api/first") public String first() throws Exception { throw new Exception("这里错误了"); }

新建统一异常拦截类

@ControllerAdvice public class GlobalExceptionAdvice { // 处理异常,value: 必填 @ExceptionHandler(value = Exception.class) public void handleException(HttpServletRequest req, Exception e) { System.out.println("hell word"); } ... }

示例demo