码迷,mamicode.com
首页 > 其他好文 > 详细

Exception异常处理

时间:2020-11-27 11:44:01      阅读:8      评论:0      收藏:0      [点我收藏+]

标签:响应   data   except   advice   try   bsp   builder   异常抛出   res   

编译期异常:写代码时候变为红色,可能会产生异常,需要处理才能执行,一般情况下, API 中写了 throws 的 Exception 都不是 RuntimeException 。

  第一种方法,把异常抛出去 方法上 throws ,交给虚拟机来处理,当不匹配的时候,虚拟机就会将异常打印出来,终止程序。

  第二种方法,不终止程序,用 try { } catch ()  { } 来处理异常,把异常打印在控制台,程序继续执行 ,以上是编译期异常。

还有运行期异常,运行时异常继承 RuntimeException ,是非受检异常,如 NullPointerException、IndexOutOfBoundsException 等,抛出运行时异常,可不处理默认交给 jvm 。

由于这类异常要么是系统异常,无法处理,如网络问题;要么是程序逻辑错误,如空指针异常; JVM 必须停止运行以改正这种错误,所以运行时异常可以不进行处理,不需要捕获或向上抛出,

当然也可以处理,使用 try{ } catch() { } 处理,将异常打印到控制台,后续代码继续执行,一般建议 runtimeException 也进行 try...catch 处理

  工作中必须对传递的参数做合法的校验,如果参数不合法,我们必须使用抛出异常的方式,告知方法的调用者,传递的参数有问题,最终交给 jvm ,

  自定义异常:告诉用户请求有问题,出异常的时候返回一个 code 给前端,如果不进行自定义异常,前后端分离的时候,后端出异常,显示给前端的页面会很不友好

  public ValidException extends RuntimeException {  // 最顶级的运行异常

    private Integer code;
    private String msg;

    public ValidException(int code,String msg) {
    super(msg);
    this.code = code;
    this.msg = msg;
    }
  }

  还需要写一个 Handler 全局的: 拦截相应的异常类

  @ControllerAdvice
  public class ValidExceptionHandler {
    @ExceptionHandler(value = Exception.class) //处理 Exception ,如果出现了该异常,就会拦截进行相应的处理,如果改成 ValidException ,则处理 ValidException 这个类
    @ResponseBody //响应数据给前端
    public JsonData Handler(Exception e) {
      if(e instanceof ValidException) {
        ValidException validException = (ValidException) e;
        return JsonData.buildError(validException.getMsg(), validException .getCode());
      } else {
        return JsonData.buildError("全局异常,位置错误");  //在 JsonData 里面有设置错误码 code = -1
      }
    }
  }

在抛出异常的时候,如果和自定义里面的异常能对应上,就会进行对应的处理

 

Exception异常处理

标签:响应   data   except   advice   try   bsp   builder   异常抛出   res   

原文地址:https://www.cnblogs.com/moxiaodan/p/14030423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!