全域性異常處理統一介面返回
阿新 • • 發佈:2021-01-26
建立統一返回結果類
@Data public class Result implements Serializable { private Boolean success; private Integer code; private String msg; private Object data; // 構造器私有 private Result(){} // 通用返回成功 public static Result ok() { Result r = new Result(); r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess()); r.setCode(ResultCodeEnum.SUCCESS.getCode()); r.setMsg(ResultCodeEnum.SUCCESS.getMessage()); return r; } // 通用返回失敗,未知錯誤 public static Result error() { Result r = new Result(); r.setSuccess(ResultCodeEnum.UNKNOWN_ERROR.getSuccess()); r.setCode(ResultCodeEnum.UNKNOWN_ERROR.getCode()); r.setMsg(ResultCodeEnum.UNKNOWN_ERROR.getMessage()); return r; } // 設定結果,形參為結果列舉 public static Result setResult(ResultCodeEnum result) { Result r = new Result(); r.setSuccess(result.getSuccess()); r.setCode(result.getCode()); r.setMsg(result.getMessage()); return r; } /**------------使用鏈式程式設計,返回類本身-----------**/ // 自定義返回資料 public Result data(Object o) { this.setData(o); return this; } // 自定義狀態資訊 public Result message(String message) { this.setMsg(message); return this; } // 自定義狀態碼 public Result code(Integer code) { this.setCode(code); return this; } // 自定義返回結果 public Result success(Boolean success) { this.setSuccess(success); return this; } //返回json public Object toJSON(){ return JSONObject.toJSON(this); } }
建立結果狀態列舉類
/** * 統一結果返回標誌 */ @Getter public enum ResultCodeEnum { SUCCESS(true,200,"成功"), UNKNOWN_ERROR(false,500,"內部錯誤,請聯絡管理員"), PARAM_ERROR(false,501,"引數錯誤"); // 響應是否成功 private Boolean success; // 響應狀態碼 private Integer code; // 響應資訊 private String message; ResultCodeEnum(boolean success, Integer code, String message) { this.success = success; this.code = code; this.message = message; } }
使用ControllerAdvice註解
具體異常可繼續新增
@ControllerAdvice
public class RestCtrlExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Result handleException(Exception e){
return Result.error().code(500).message(e.getMessage()+",內部異常,請聯絡管理員");
}
}
然後controller層返回結果的時候不用在寫tryCatch了 ,返回結果的時候也用Result封裝一下,起碼這樣返回給其他平臺呼叫的時候格式統一,但凡服務出問題也不至於把本地的異常拋給下游
示例返回
return Result.ok().data(array_data);