springboot自定义异常类+全局处理异常
在项目运行中,难免会产生抛出一些待处理的异常,而java自带的异常信息不是很明确,所以会生成自己想要的一些数据格式。这时候就会用到自定义异常类。
抛出的运行错误的异常,必然是要处理的,我用到的是全局异常处理去处理这些异常,可以返回给前端你想返回的数据。
自定义异常类
自定义异常类需要继承java异常类的父类,因为一般需要处理的异常都是RuntimeException(运行时异常),所以一般就继承他。
注:
- get/set方法,toString方法一定要有
- Java异常机制 控制台最后打印出来的信息都是父类的信息,你光在自定义的子类赋值没用,需要调用父类构造器给父类赋值 两个解决方案:(1)在构造方法中调用父类的有参构造(2)重写getMessage方法
public class RoleException extends RuntimeException{
//异常错误码
private int code;
//异常信息
private String msg;
public RoleException(int code, String msg) {
super(msg);
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public String toString() {
return "RoleException{" +
"code=" + code +
", msg='" + msg + '\'' +
'}';
}
}
全局处理异常
本篇文章,我用的方法是 增强controller 即:基于@ControllerAdvice注解的Controller层的全局异常统一处理
注:@ControllerAdvice只能针对于Controller层的异常
我理解为:@ControllerAdvice 这个东西可以看作Controller ,return也是响应,只不过他的请求是controller层中的抛出的异常类
@ExceptionHandler(value = {要捕获的异常类.class})
@ControllerAdvice
public class GlobalException {
/**
* 处理RoleException异常
* @param e
* @return 异常信息
*/
@ExceptionHandler(value = {RoleException.class})
@ResponseBody
public Object roleExceptionHandle(Exception e) {
RoleException roleException = (RoleException) e;
return new ExceptionMessage(roleException.getCode(),roleException.getMsg());
}
}