Spring @ControllerAdvice+@ExceptionHandler統一異常處理
編寫返回介面格式:
public interface ResultCode {
public static Integer SUCCESS = 200; //成功
public static Integer ERROR = 201; //失敗
}
@Data
public class R {
private Boolean success;
private Integer code;
private String message;
private Map<String, Object> data = new HashMap<String, Object>();
//把構造方法私有
private R() {}
//成功靜態方法
public static R ok() {
R r = new R();
r.setSuccess(true);
r.setCode(ResultCode.SUCCESS);
r.setMessage("成功");
return r;
}
//失敗靜態方法
public static R error() {
R r = new R();
r.setSuccess(false);
r.setCode(ResultCode.ERROR);
r.setMessage("失敗");
return r;
}
public R success(Boolean success){
this.setSuccess(success);
return this;
}
public R message(String message){
this.setMessage(message);
return this;
}
public R code(Integer code){
this.setCode(code);
return this;
}
public R data(String key, Object value){
this.data.put(key, value);
return this;
}
public R data(Map<String, Object> map){
this.setData(map);
return this;
}
}
全域性異常
@ControllerAdvice
public class GlobalExceptionHandler {
//指定出現什麼異常執行這個方法
@ExceptionHandler(Exception.class)
@ResponseBody //為了返回資料
public R error(Exception e) {
e.printStackTrace();
return R.error().message("執行了全域性異常..");
}
}
只要controller中發生了@ExceptionHandler()中的異常就會執行這個方法。
自定義異常
編寫自定義異常類
@Data
@AllArgsConstructor //生成有引數構造方法
@NoArgsConstructor //生成無引數構造
public class EduException extends RuntimeException {
private Integer code;//狀態碼
private String msg;//異常資訊
}
引入自定義異常:
@ControllerAdvice
public class GlobalExceptionHandler {
//自定義異常
@ExceptionHandler(EduException.class)
@ResponseBody //為了返回資料
public R error(EduException e) {
log.error(e.getMessage());
e.printStackTrace();
return R.error().code(e.getCode()).message(e.getMsg());
}
}
捕獲異常時丟擲自定義異常
try {
Page<EduTeacher> teacherPage = new Page<>(current, limit);
eduTeacherService.page(teacherPage, null);
int i = 10 / 0;
long total = teacherPage.getTotal();
List<EduTeacher> eduTeachers = teacherPage.getRecords();
return R.ok().data("total", total).data("rows", eduTeachers);
}catch (Exception e){
throw new EduException(201,"自定義異常");
}
幫助到您請點贊關注收藏謝謝!!
相關文章
- spring boot 統一異常處理Spring Boot
- spring中的統一異常處理Spring
- Spring Boot統一異常處理最佳實踐Spring Boot
- Spring Boot 異常處理Spring Boot
- Spring進階之@ControllerAdvice與統一異常處理SpringController
- Spring Boot實戰系列(4)統一異常處理Spring Boot
- SpringBoot統一異常處理Spring Boot
- SpringMVC 統一異常處理SpringMVC
- Spring Boot統一異常處理以及引數校驗Spring Boot
- C#自定義異常 統一異常處理C#
- Spring系列(七) Spring MVC 異常處理SpringMVC
- Spring MVC原始碼(四) ----- 統一異常處理原理解析SpringMVC原始碼
- SpringBoot實現統一異常處理Spring Boot
- SpringBoot處理全域性統一異常Spring Boot
- 深入理解Spring異常處理Spring
- 統一返回物件和異常處理(一)物件
- SpringBoot系列——自定義統一異常處理Spring Boot
- SpringBoot 實戰 (十四) | 統一處理異常Spring Boot
- 統一返回物件和異常處理(二)物件
- springboot統一異常處理及返回資料的處理Spring Boot
- 異常篇——異常處理
- Spring註解之@ExceptionHandler 統一異常處理和獲取方法名SpringException
- Spring Boot2從入門到實戰:統一異常處理Spring Boot
- 異常處理
- 29.Spring Boot中異常處理與REST格式處理Spring BootREST
- 簡單的全域性異常統一處理
- SpringBoot第十四篇:統一異常處理Spring Boot
- 前端錯誤收集以及統一異常處理前端
- Spring Boot優雅地處理404異常Spring Boot
- Spring Cloud Gateway-自定義異常處理SpringCloudGateway
- Spring Cloud Gateway的全域性異常處理SpringCloudGateway
- 介面異常狀態統一處理方案:優先業務端處理,再按需統一處理。
- JSP 異常處理如何處理?JS
- 異常-throws的方式處理異常
- springBoot資料校驗與統一異常處理Spring Boot
- Spring Cloud Gateway自定義異常處理Exception HandlerSpringCloudGatewayException
- spring-boot-route(四)全域性異常處理Springboot
- Spring Boot 2 Webflux的全域性異常處理Spring BootWebUX