全局異常處理
為什么要配全局異常?
- 不配全局服務端報錯場景,1/0、空指針等
配置好處
- 統一的錯誤頁面或錯誤碼
- 對用戶更友好
配置全局異常
第一步類添加注解
- @ControllerAdvicce,如果需要返回JSON數據,則方法需要加@ReponseBody
- @RestControllerAdvice,默認返回JSON數據,方法不需要加@ResponseBody
第二步方法添加處理器
- 捕獲全局異常,處理所有不可知的異常
- @ExceptionHandler(value=Exception.class)
CustomExtHandler.java
package net.cyb.demo.handler; import net.cyb.demo.utils.JsonData; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; /** * 標記這是一個異常處理類 */ @RestControllerAdvice public class CustomExtHandler { @ExceptionHandler(value = Exception.class) JsonData HandlerException(Exception e, HttpServletRequest request){ return JsonData.buildError(-2,"服務端出問題了"); } }
JsonData.java
package net.cyb.demo.utils; /** * 接口返回工具類 */ public class JsonData { private int code; private Object data; private String msg; public JsonData() { } public JsonData(int code, Object data) { this.code = code; this.data = data; } public JsonData(int code, Object data, String msg) { this.code = code; this.data = data; this.msg = msg; } public static JsonData buildSuccess(Object data) { return new JsonData(0, data); } public static JsonData buildError(String msg) { return new JsonData(-1, "", msg); } public static JsonData buildError(int code, String msg) { return new JsonData(code, "", msg); } public int getCode() { return code; } public void setCode(int 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 + '\'' + '}'; } }