springboot2 統一異常處理
阿新 • • 發佈:2019-01-08
統一異常處理,不需要在每一層上單獨捕獲異常,只需要關注業務的開發:
程式碼如下:
@RestControllerAdvice @Slf4j public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class) public AjaxResponse handler(Exception e){ AjaxResponse r = new AjaxResponse(); if (e instanceof RuntimeException){ RuntimeException selectNoFindException= (RuntimeException) e; r.setStatus(-1); r.setMsg(selectNoFindException.getMessage()); } else { r.setStatus(-1); r.setMsg("系統錯誤"); } log.error(e.getMessage()); return r; } }
其中AjaxResponse的原始碼定義如下:
packagecom.crhms.medicareopinion.model; import lombok.Data; @Data public class AjaxResponse<T> { private Integer status; private String msg; private T data; }
解釋一下:
1. 異常要分類,主要是因為異常的錯誤訊息要傳遞給前端顯示,如果我們直接把所有的異常訊息給前端,就會有諸如錯誤碼,空指標類似的訊息,顯示是不對的。
通常來說,自定義的異常是把錯誤給前端直接顯示, 其它異常我們可以固定一個錯誤訊息給前端即可,
2. 把正常的rest返回結果和異常的返回結果 用一個類來封裝一下,方便修改,而不是硬編碼。請參考下一篇springboot統一返回結果