欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

千鋒扣丁學堂Java培訓之SpringBoot使用統(tǒng)一異常處理詳解

2019-05-06 13:17:22 3453瀏覽

今天千鋒扣丁學堂Java培訓老師給大家分享一篇關于SpringBoot使用統(tǒng)一異常處理詳解,下面我們一起來看一下吧。

場景:針對異常處理,我們原來的做法是一般在最外層捕獲異常即可,例如在Controller中

@Controller
public class HelloController {
  
  private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
  
  @GetMapping(value = "/hello")
  @ResponseBody
  public Result hello() {
    try {
      //TODO 具體的邏輯省略……
    } catch (Exception e) {
      logger.error("hello接口異常={}", e);
      return ResultUtil.success(-1, "system error", null);
    }
    return ResultUtil.success(0, "success", null);
  }
}

這樣的話也能解決部分問題,但是無法獲取到自己指定的異常,引入全局統(tǒng)一異常處理的話將會極大的改善代碼,減少冗余代碼的產生。

自定義異常類:注意要繼承自RuntimeException而不是Exception,繼承自Exception的話,當拋出自定義異常時spring事務不會回滾

public class GlobalException extends RuntimeException {
  
  private Integer code; //因為我需要將異常信息也返回給接口中,所以添加code區(qū)分
  
  public GlobalException(Integer code,String message) {
    super(message);  //把自定義的message傳遞個異常父類
    this.code = code;
  }
  
  public Integer getCode() {
    return code;
  }
  
  public void setCode(Integer code) {
    this.code = code;
  }
}

自定義統(tǒng)一異常處理器:比較關鍵的兩個注解@ControllerAdvice、@ExceptionHandler

@ControllerAdvice
public class ExceptionHandle {
  
  @ResponseBody  //因為我需要將拋出的異常返回給接口,所以加上此注解
  @ExceptionHandler
  public Result handle(Exception e) {
    if (e instanceof GlobalException) {
      GlobalException ge = (GlobalException) e;
      return ResultUtil.success1(ge.getCode(), ge.getMessage());
    }
    return ResultUtil.success1(-1, "system error!");
  }
  
}

寫個測試類測試下

@GetMapping(value = "/hello1")
@ResponseBody
public Result hello(@RequestParam(value = "age", defaultValue = "50", required = false) Integer age) throws GlobalException {
  if (age < 10) {
    throw new GlobalException(ConstantEnum.LESS10.getCode(), ConstantEnum.LESS10.getMsg());
  } else if (age > 50) {
    throw new GlobalException(ConstantEnum.MORE50.getCode(), ConstantEnum.MORE50.getMsg());
  } else {
    return ResultUtil.success1(0, "success");
  }
}

把code、message封裝在了ConstantEnum枚舉里面,方便統(tǒng)一維護

public enum ConstantEnum {
  
  ERROR(-1, "system error!"),
  SUCCESS(100, "success"),
  LESS10(101, "自定義異常信息-我小于10歲"),
  MORE50(5001, "自定義異常信息-我大于50歲");
  
  private Integer code;
  private String msg;
  
  public Integer getCode() {
    return code;
  }
  
  public String getMsg() {
    return msg;
  }
  
  ConstantEnum(Integer code, String msg) {
    this.code = code;
    this.msg = msg;
  }
}


這樣就實現了全局的統(tǒng)一異常處理,非常方便且優(yōu)雅,快快在你的項目中用起來吧!

以上就是關于千鋒扣丁學堂Java培訓之SpringBoot使用統(tǒng)一異常處理的全部內容,希望對大家的學習有所幫助,想要了解更多關于Java開發(fā)方面內容的小伙伴,請關注扣丁學堂Java培訓官網、微信等平臺,扣丁學堂IT職業(yè)在線學習教育有專業(yè)的Java講師為您指導,此外扣丁學堂老師精心推出的Java視頻教程定能讓你快速掌握Java從入門到精通開發(fā)實戰(zhàn)技能??鄱W堂Java技術交流群:850353792。


                          【掃碼進入HTML5VIP免費公開課】  


     【關注微信公眾號獲取更多學習資料】        【掃碼進入HTML5前端開發(fā)VIP免費公開課】  



查看更多關于“Java開發(fā)資訊”的相關文章>>

標簽: Java培訓 Java視頻教程 Java多線程 Java面試題 Java學習視頻 Java開發(fā)

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯科技有限公司版權所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部