弹簧引导中怎么对异常进行处理

  介绍

今天就跟大家聊聊有关弹簧引导中怎么对异常进行处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

先谈谈“异常处理”这件事。下面有2份伪代码,对比下:

//①基于if/else判断
  如果(deletePage(页面)==E_OK) {
  如果(registry.deleteReference (page.name)==E_OK) {
  如果(configKeys.deleteKey (page.name.makeKey ())==E_OK) {
  logger.log (“deleted"页);
  其他}{
  logger.log (“configKey不是deleted");
  }
  其他}{
  logger.log(“从注册表failed" deleteReference);
  }
  其他}{
  logger.log(“删除failed");
  返回E_RROR;
  }
//②基于异常处理
  尝试{
  deletePage(页面);
  registry.deleteReference (page.name);
  configKeys.deleteKey (page.name.makeKey ());
  }捕捉(异常e) {
  logError (e);
  }

可以看的出,如果使用异常替代返回错误码,错误处理代码就能从主路径逻辑中分离出来,得到简化!

②中,基于异常处理的代码真的好吗?其实是丑陋不堪的,它搞乱了代码结构,把错误处理与正常流程混为一谈。最好把try和catch代码块的主体部分抽离出来,形成另外的函数。

//③优雅的异常处理逻辑
  公共空间删除页面(页面){
  尝试{
  deletePageAndAllReferences(页面);
  }捕捉(异常e) {
  logError (e);
  }
  }
  
  私人空间deletePageAndAllReferences页面(页面){抛出异常
  deletePage(页面);
  registry.deleteReference (page.name);
  configKeys.deleteKey (page.name.makeKey ());
  }
  
  私人空间logError(异常e) {
  logger.log (e.getMessage ());
  }

③中,函数各司其职,更易于理解和修改了。

总结:使用异常而不是错误码,优雅地使用异常!函数应该只做一件事,处理错误就是一件事,因此,处理错误的函数不该做其他事!

<强>在春天引导中处理异常

<强> 1,默认的异常处理

例如401404500年5 xx等异常,弹簧引导默认会跳转到预配置的页面,此处以thymeleaf模板引擎为例:

/* *
  *统一响应
  * @author anoy
  */公开课ResponseBean{
  
  私人int代码;
  
  私人字符串消息;
  
  私人T数据;
  
  公共ResponseBean () {}
  
  公共ResponseBean (ExceptionEnum ExceptionEnum) {
  这一点。代码=exceptionEnum.getCode ();
  这一点。消息=exceptionEnum.getMessage ();
  }//省略setter和getter
  }
/* *   *异常类型枚举   * @author anoy   */公共enum ExceptionEnum {      GIRL_FRIEND_NOT_FOUND(100000年,“女朋友不是found");      私人int代码;      私人字符串消息;      ExceptionEnum (int代码字符串消息){   这一点。代码=代码;   这一点。消息=消息;   }      公共int getCode () {   返回码;   }      公共字符串getMessage () {   返回消息;   }   }

今天七夕,写个GirlFriendNotFoundException(很有同感,是不是?)

@ controller   公开课用户控件{      @RequestMapping(“/朋友/{id}“)   公共字符串的朋友(@PathVariable (“id")长id)抛出GirlFriendNotFoundException {   如果(id==1 l) {   把新GirlFriendNotFoundException ();   }   返回“朋友”;   }      @ExceptionHandler (GirlFriendNotFoundException.class)   @ResponseBody   公共ResponseBean handleGirlFriendNotFound (GirlFriendNotFoundException例外){   loggerError(异常);   返回新ResponseBean (ExceptionEnum.GIRL_FRIEND_NOT_FOUND);   }      私人空间logError(异常e) {   logger.error (e.getMessage ());   }   }

<强> 3,全局异常处理

个人观点:全局异常应该处理系统故障级别的问题,像参数校验这种类型的异常,应该作为局部异常来处理,例如复述,连接断开,无法请求数据,这种异常就应该当做全局异常来处理,在异常处理的逻辑中,还应该添加通知到开发人员的功能,方便开发人员及时处理错误!

弹簧引导中怎么对异常进行处理