由於咱們咱們項目開發過程當中遇到各類異常,咱們單獨處理的話性能較低,也不靈活,用戶顯示的的是一堆英文的提示,因此咱們一會兒就乾點這種異常,因此咱們須要全局異常處理,java
首先咱們建立一個 異常包,包裏面建立一個類數據庫
咱們的這個異常處理配合Lombok來配合處理
這個類是咱們的全局異常類,
@Slf4j //lombok中的日誌處理註解 @RestControllerAdvice //全局異常 public class GolbalException { @ExceptionHandler(RuntimeException.class) @ResponseBody public String GolbalRuntimeException(RuntimeException e){ log.error("RuntimeException.exception {}",e.getMessage()); return e.getMessage(); } }
@Slf4J(這個註解是Lombok的日誌處理註解)
@RestControllerAdvice(這個註解表示的是當前的類是全局異常處理類)
@ExceptionHandle(這個註解描述controller層處理的異常方法)
@ResponseBody(這個註解描述java對象轉換json格式)
咱們的數據到客戶端裏,咱們對這些數據進行狀態設計,
假如如今響應的數據包含三種 好比:狀態,消息,具體數據等...json
首先咱們要建立新的包,而後包裏面建立類
segmentfault
@Data @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor public class viewTable<T> { private Integer state=1;//狀態碼 表示1 ok,表示0 error private String message;//狀態信息 private List<T> rows; //封裝查詢結果 public viewTable(String message){ this.message=message; } public viewTable(List<T> list) { this.rows=list; } public viewTable(Throwable e){ this.state=0; this.message=e.getMessage(); } }
咱們基於Lombak來實現
@Data @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor
@Data--這個註解Lombak的註解 自動生成get和set以及tostring
@Accessors--這個註解的做用getter和setter方法的方法名都是屬性名
@NoArgsConstructor--生成無參構造
@AllArgsConstructor--生成有參構造服務器
private Integer state=1;//狀態碼 表示1 ok,表示0 error private String message;//狀態信息 private List<T> rows; //封裝查詢結果
state--狀態 給頁面發送 1表示正常 0表示錯誤
message -- 狀態信息 成功的話 ok 錯誤的 報異常
rows -- 咱們顯示的數據數據結構
public viewTable(String message){ this.message=message; } public viewTable(List<T> list) { this.rows=list; } public viewTable(Throwable e){ this.state=0; this.message=e.getMessage(); }
第一個 --- 若是返回的結果是字符串
第二個 --- 若是返回的結果是查詢的數據
第三個 --- 若是返回的數據是異常性能
這樣咱們給頁面顯示的數據成功封裝好了
如今咱們響應數據結構和初級異常處理 接下來咱們把兩個都合起來this
@Slf4j //lombok中的日誌處理註解 @RestControllerAdvice //全局異常 public class GolbalException<T> { @ExceptionHandler(Exception.class) @ResponseBody public viewTable GolbalRuntimeException(Exception e){ viewTable<T> v=new viewTable<>(); v.setState(0); if (e instanceof BadSqlGrammarException){ v.setMessage("數據庫異常"); }else if (e instanceof RuntimeException){ v.setMessage("服務器異常"); } log.error("RuntimeException.exception {}",e.getMessage()); return v; } }
報錯的異常