老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

SpringBoot中怎么對(duì)異常進(jìn)行處理

今天就跟大家聊聊有關(guān)Spring Boot中怎么對(duì)異常進(jìn)行處理,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

10年積累的做網(wǎng)站、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有臨西免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

先談?wù)劇爱惓L幚怼边@件事。下面有 2 份偽代碼,對(duì)比下:

// ① 基于 if/else 判斷
if(deletePage(page) == E_OK){
 if(registry.deleteReference(page.name) == E_OK){
  if(configKeys.deleteKey(page.name.makeKey()) == E_OK){
   logger.log("page deleted");
  }else{
   logger.log("configKey not deleted");
  }
 }else{
  logger.log("deleteReference from registry failed");
 }
}else{
 logger.log("delete failed");
 return E_RROR;
}
// ② 基于異常處理
try{
 deletePage(page);
 registry.deleteReference(page.name);
 configKeys.deleteKey(page.name.makeKey());
}catch(Exception e){
 logError(e);
}

可以看出,如果使用異常替代返回錯(cuò)誤碼,錯(cuò)誤處理代碼就能從主路徑邏輯中分離出來(lái),得到簡(jiǎn)化!

②中,基于異常處理的代碼真的好嗎?其實(shí)是丑陋不堪的,它搞亂了代碼結(jié)構(gòu),把錯(cuò)誤處理與正常流程混為一談。最好把 try 和 catch 代碼塊的主體部分抽離出來(lái),形成另外的函數(shù)。

// ③ 優(yōu)雅的異常處理邏輯
public void delete(Page page){
 try{
  deletePageAndAllReferences(page);
 }catch(Exception e){
  logError(e);
 }
}

private void deletePageAndAllReferences(Page page) throw Exception{
 deletePage(page);
 registry.deleteReference(page.name);
 configKeys.deleteKey(page.name.makeKey());
}

private void logError(Exception e){
 logger.log(e.getMessage());
}

③中,函數(shù)各司其職,更易于理解和修改了。

總結(jié):使用異常而不是錯(cuò)誤碼,優(yōu)雅地使用異常!函數(shù)應(yīng)該只做一件事,處理錯(cuò)誤就是一件事。因此,處理錯(cuò)誤的函數(shù)不該做其他事!

在 Spring Boot 中處理異常

1、默認(rèn)的異常處理

例如 401,404,500,5XX 等異常,Spring Boot 默認(rèn)會(huì)跳轉(zhuǎn)到預(yù)配置的頁(yè)面,此處以 thymeleaf 模板引擎為例:

+ resources
 + templates
  + error
   - 401.html
   - 404.html
   - 500.html

只需在 resources/templates/error/ 路徑下添加對(duì)應(yīng)的html文件即可。

2、局部異常處理

局部異常一般處理業(yè)務(wù)邏輯出現(xiàn)的異常情況,在 Controller 下使用 @ExceptionHandler 注解來(lái)處理異常。舉個(gè)小例子:

先定義 ResponseBean 和 ExceptionEnum 兩個(gè)對(duì)象,輔助完成優(yōu)雅的代碼。

/**
 * 統(tǒng)一響應(yīng)
 * @author anoy
 */
public class ResponseBean {

  private int code;

  private String message;

  private T data;

  public ResponseBean(){}

  public ResponseBean(ExceptionEnum exceptionEnum){
    this.code = exceptionEnum.getCode();
    this.message = exceptionEnum.getMessage();
  }

  // 省略 setter/getter
}
/**
 * 異常類型枚舉
 * @author anoy
 */
public enum ExceptionEnum {

  GIRL_FRIEND_NOT_FOUND(100000, "girl friend not found");

  private int code;

  private String message;

  ExceptionEnum(int code, String message){
    this.code = code;
    this.message = message;
  }

  public int getCode() {
    return code;
  }

  public String getMessage() {
    return message;
  }
}

今天七夕,寫個(gè) GirlFriendNotFoundException(很有同感,是不是?)

@Controller
public class UserController {

  @RequestMapping("/friend/{id}")
  public String friend(@PathVariable("id") Long id) throws GirlFriendNotFoundException {
    if (id == 1L){
      throw new GirlFriendNotFoundException();
    }
    return "friend";
  }

  @ExceptionHandler(GirlFriendNotFoundException.class)
  @ResponseBody
  public ResponseBean handleGirlFriendNotFound(GirlFriendNotFoundException exception){
    loggerError(exception);
    return new ResponseBean(ExceptionEnum.GIRL_FRIEND_NOT_FOUND);
  }
  
  private void logError(Exception e){
    logger.error(e.getMessage());
  }
}

3、全局異常處理

個(gè)人觀點(diǎn):全局異常應(yīng)該處理系統(tǒng)故障級(jí)別的問(wèn)題,像參數(shù)校驗(yàn)這種類型的異常,應(yīng)該作為局部異常來(lái)處理,例如 redis 連接斷開,無(wú)法請(qǐng)求數(shù)據(jù),這種異常就應(yīng)該當(dāng)做全局異常來(lái)處理,在異常處理的邏輯中,還應(yīng)該添加通知到開發(fā)人員的功能,方便開發(fā)人員及時(shí)處理錯(cuò)誤!

全局異常處理,使用 @ControllerAdvice @ExceptionHandler 來(lái)配合。

@ControllerAdvice
public class GlobalExceptionHandler {

  @ExceptionHandler(RedisConnectionFailureException.class)
  public void handlerRedisConnectionFailureException(RedisConnectionFailureException exception){
    logError(exception);
    noticeToDev();
  }

  private void logError(Exception e){
    logger.error(e.getMessage());
  }

  private void noticeToDev(){
    // 通知具體開發(fā)人員
  }

}

看完上述內(nèi)容,你們對(duì)Spring Boot中怎么對(duì)異常進(jìn)行處理有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)站名稱:SpringBoot中怎么對(duì)異常進(jìn)行處理
網(wǎng)頁(yè)URL:http://www.xueling.net.cn/article/pdssid.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 国产黄色小视频 | 亚洲国产日韩欧美在线 | 西西人体www大胆高清 | gogogo高清免费观看中国 | 伊人久久综在合线亚洲2019 | 男人激烈吮乳吃奶动图 | www.888www看片 | 国产精品毛片久久久久久久av | 嗯啊久久| 少妇张开腿露私下 | 国产在线视频欧美 | 欧美日韩日本国产 | 天天天操天天天干 | 国产成人av在线 | 高清国产一区二区三区在线 | 免费视频专区一国产盗摄 | 亚洲精品美女久久久久久久 | 欧美91精品国产自产 | 日韩精品一区二区三区免费观影 | 四虎成人精品在永久免费 | 欧美日韩综合久久 | 亚洲精品蜜夜内射 | 久99久人碰人视频在线 | 欧美不卡高清一区二区三区 | 国产乱人视频在线播放 | 欧美性受xxxx黑人猛交 | 少妇激情一区二区三区视频 | 日批视频在线看 | 中文视频一区视频二区视频三区 | 久久国产精品久久喷水 | 美女一区| 四虎成人精品国产永久免费 | 国产精品无码首页自拍 | 亚洲欧美日韩国产自偷 | 亚洲一区精品视频 | 国产一级一级 | 第一次进丫头身体 | 青青青在线视频观看 | 亚洲无吗av| 天天综合天天爱天天做天天爽 | 成人国内精品久久久久影院成.人国产9 |