标签:响应 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
}
}
}
在抛出异常的时候,如果和自定义里面的异常能对应上,就会进行对应的处理
标签:响应 data except advice try bsp builder 异常抛出 res
原文地址:https://www.cnblogs.com/moxiaodan/p/14030423.html