欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot使用統(tǒng)一異常處理詳解

 更新時(shí)間:2019年05月06日 11:24:14   作者:simonsfan  
這篇文章主要為大家詳細(xì)介紹了SpringBoot使用統(tǒng)一異常處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

場(chǎng)景:針對(duì)異常處理,我們?cè)瓉?lái)的做法是一般在最外層捕獲異常即可,例如在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);
  }
}

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

自定義異常類:注意要繼承自RuntimeException而不是Exception,繼承自Exception的話,當(dāng)拋出自定義異常時(shí)spring事務(wù)不會(huì)回滾

public class GlobalException extends RuntimeException {
 
  private Integer code; //因?yàn)槲倚枰獙惓P畔⒁卜祷亟o接口中,所以添加code區(qū)分
 
  public GlobalException(Integer code,String message) {
    super(message);  //把自定義的message傳遞個(gè)異常父類
    this.code = code;
  }
 
  public Integer getCode() {
    return code;
  }
 
  public void setCode(Integer code) {
    this.code = code;
  }
}

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

@ControllerAdvice
public class ExceptionHandle {
 
  @ResponseBody  //因?yàn)槲倚枰獙伋龅漠惓7祷亟o接口,所以加上此注解
  @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!");
  }
 
}

寫(xiě)個(gè)測(cè)試類測(cè)試下

@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)一維護(hù)

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;
  }
}


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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis中的mapper.xml使用循環(huán)語(yǔ)句

    mybatis中的mapper.xml使用循環(huán)語(yǔ)句

    這篇文章主要介紹了mybatis中的mapper.xml使用循環(huán)語(yǔ)句,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spark SQL 編程初級(jí)實(shí)踐詳解

    Spark SQL 編程初級(jí)實(shí)踐詳解

    這篇文章主要為大家介紹了Spark SQL 編程初級(jí)實(shí)踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 淺談Java自動(dòng)裝箱與拆箱及其陷阱

    淺談Java自動(dòng)裝箱與拆箱及其陷阱

    下面小編就為大家?guī)?lái)一篇淺談Java自動(dòng)裝箱與拆箱及其陷阱。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • java使用IO流對(duì)數(shù)組排序?qū)嵗v解

    java使用IO流對(duì)數(shù)組排序?qū)嵗v解

    在本篇文章里小編給大家整理的是一篇關(guān)于java使用IO流對(duì)數(shù)組排序?qū)嵗v解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-02-02
  • Java編程中使用lambda表達(dá)式的奇技淫巧

    Java編程中使用lambda表達(dá)式的奇技淫巧

    這篇文章主要介紹了Java編程中使用lambda表達(dá)式的奇技淫巧,使用Lambda表達(dá)式可以替代只有一個(gè)函數(shù)的接口實(shí)現(xiàn),告別匿名內(nèi)部類,代碼看起來(lái)更簡(jiǎn)潔易懂,是Java8開(kāi)始推出的人們期待已久的功能,需要的朋友可以參考下
    2016-03-03
  • java調(diào)用oracle分頁(yè)存儲(chǔ)過(guò)程示例

    java調(diào)用oracle分頁(yè)存儲(chǔ)過(guò)程示例

    這篇文章主要介紹了java調(diào)用oracle分頁(yè)存儲(chǔ)過(guò)程,需要的朋友可以參考下
    2014-03-03
  • 詳解用maven將dubbo工程打成jar包運(yùn)行

    詳解用maven將dubbo工程打成jar包運(yùn)行

    這篇文章主要介紹了詳解用maven將dubbo工程打成jar包運(yùn)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java導(dǎo)入新項(xiàng)目報(bào)錯(cuò)java:JDK?isn‘t?specified?for?module解決辦法

    Java導(dǎo)入新項(xiàng)目報(bào)錯(cuò)java:JDK?isn‘t?specified?for?module解決辦法

    這篇文章主要給大家介紹了關(guān)于Java導(dǎo)入新項(xiàng)目報(bào)錯(cuò)java:JDK?isn‘t?specified?for?module的解決辦法,當(dāng)您在導(dǎo)入Java項(xiàng)目時(shí)遇到錯(cuò)誤時(shí),可以嘗試以下面的方法來(lái)處理,需要的朋友可以參考下
    2024-05-05
  • pdf2swf+flexpapers實(shí)現(xiàn)類似百度文庫(kù)pdf在線閱讀

    pdf2swf+flexpapers實(shí)現(xiàn)類似百度文庫(kù)pdf在線閱讀

    這篇文章主要介紹了pdf2swf+flexpapers實(shí)現(xiàn)類似百度文庫(kù)pdf在線閱讀的相關(guān)資料,需要的朋友可以參考下
    2014-10-10
  • Java Calendar日歷類的使用介紹

    Java Calendar日歷類的使用介紹

    Candendar類是一個(gè)抽象類,提供了一些獲取當(dāng)前時(shí)間,或者指定的時(shí)間的字段和一些方法,我們可以通過(guò)一些方法與字段對(duì)他進(jìn)行獲取當(dāng)前天或者當(dāng)月的一些信息
    2022-09-09

最新評(píng)論