springboot自定义异常和全局异常处理
Posted big-cut-cat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot自定义异常和全局异常处理相关的知识,希望对你有一定的参考价值。
模拟开发过程中的异常处理:
场景:
如果不对异常处理,返回给前端的将是一个异常错误页日志
所以要异常处理
首先准备个工具类:作为返回给前端的JsonData数据封装:
此类也可以作为工具类直接使用。
package net.myclass.myvideo.domain; import java.io.Serializable; /** * 功能描述:工具类 * * <p> 创建时间:May 14, 2018 7:58:06 PM </p> */ public class JsonData implements Serializable { /** * */ private static final long serialVersionUID = 1L; private Integer code; // 状态码 0 表示成功,1表示处理中,-1表示失败 private Object data; // 数据 private String msg;// 描述 public JsonData() { } public JsonData(Integer code, Object data, String msg) { this.code = code; this.data = data; this.msg = msg; } // 成功,传入数据 public static JsonData buildSuccess() { return new JsonData(0, null, null); } // 成功,传入数据 public static JsonData buildSuccess(Object data) { return new JsonData(0, data, null); } // 失败,传入描述信息 public static JsonData buildError(String msg) { return new JsonData(-1, null, msg); } // 失败,传入描述信息,状态码 public static JsonData buildError(String msg, Integer code) { return new JsonData(code, null, msg); } // 成功,传入数据,及描述信息 public static JsonData buildSuccess(Object data, String msg) { return new JsonData(0, data, msg); } // 成功,传入数据,及状态码 public static JsonData buildSuccess(Object data, int code) { return new JsonData(code, data, null); } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } @Override public String toString() { return "JsonData [code=" + code + ", data=" + data + ", msg=" + msg + "]"; } }
下面开始处理异常:
1.自定义异常类的开发:
package net.myclass.myvideo.exception; /** * 自定义异常类 */ public class MyException extends RuntimeException { /** * 状态码 */ private Integer code; /** * 异常消息 */ private String msg; public MyException(int code, String msg){ super(msg); this.code = code; this.msg = msg; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
2.异常管理类的开发:
配置value,捕获异常;
当捕获的异常为自定义异常,则处理自定义异常
当捕获的为其他异常,统一处理为全局异常(未知错误)
注意:
如果value=MyException.class,则只处理MyException,不用加下面的判断条件直接return即可
package net.myclass.myvideo.exception; import net.xdclass.xdvideo.domain.JsonData; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; /** * 异常处理控制器 */ @ControllerAdvice public class MyExceptionHandler { @ExceptionHandler(value = Exception.class) @ResponseBody public JsonData Handler(Exception e){ if(e instanceof MyException){ MyException myException = (MyException)e; return JsonData.buildError(myException.getMsg(),myException.getCode()); }else{ return JsonData.buildError("全局异常,未知错误"); } } }
这样封装之后一旦捕获了异常,就会返回一个JsonData给前端了
以上是关于springboot自定义异常和全局异常处理的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...
SpringMvc,Springboot统一校验自定义异常全局异常处理
SpringMvc,Springboot统一校验自定义异常全局异常处理