工作中异常处理的简单理解

运行异常和编译异常区别

1.运行异常可以不用处理,
2.编译异常必须处理,try,catch处理或者throws向上抛出,

异常在事务中的应用

注意:针对spring事务控制,在service层中如果try/catch捕获了异常,那么在catch中必须再抛出异常,事务管理器才能根据异常回滚事务,否则事务不回滚
或者也可以在catch代码块中加上下面的语句而不用throw:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚事务
格式如下:
@Transactional(rollbackFor = ConsoleCenterException.class)
public ConsoleResult addThirdDevelopment(ThirdDevelopmentBo thirdDevelopmentBo) throws ConsoleCenterException {
try{
thirdDevelopmentMapper.insert(thirdDevelopment);
return new ConsoleResult(true);
} catch (Exception e) {
logger.error(FunIMsgFormat.MsgStyle.DEFAULT_LOG.getFormat(“会员管理系统,新增第三方开发者信息异常”));
logger.error(FunIMsgFormat.HEAD, e);
throw new ConsoleCenterException(ThirdAppManageRespCodeConst.EXCEPTION.getCode(),
ThirdAppManageRespCodeConst.EXCEPTION.getDesc());
}

异常的其他理解

3.catch{}代码块后边的代码是可以正常执行的,throw new exception()代码后边的代码是不能执行的,而是直接抛异常给调用方法,或者try/catch捕获异常直接走catch代码块中的代码
4.service层一般是抛出异常。controller层一般是返回一个封装错误信息的对象,也可以继续抛出异常有全局异常类进行异常捕获,再返回封装错误信息的对象
5.针对一个try/多catch的语句,多个catch属于平级关系,只有一个catch会执行,catch中继续抛出异常会向上抛给调用方法,后边的catch不会继续捕获前边catch抛出的异常。

全局异常和局部异常处理

6.springmvc有全局异常处理和局部异常处理,可以在controller类中的方法上使用@ExceptionHandler注解,这样controller类中抛出异常后与该异常处理方法的异常类型相同则该异常被处理
注意:如果全局异常和局部异常都存在,具体的执行顺序是:先查找局部异常,如果不满足再查找全局异常处理,如果全局异常处理也不满足直接抛异常给页面
局部异常具体格式如下:
@ExceptionHandler(value=Exception.class)
@ResponseBody
public String handleException(Exception e){
System.out.println(“局部异常处理”);
return e.getMessage();
}
同样,也可以定义异常处理全局类来处理异常,需要在类上加注解@ControllerAdvice,类中定义异常处理方法加@ExceptionHandler,
全局异常具体格式如下:
@ControllerAdvice
public class AdviceExceptionHandler {
@ExceptionHandler(Throwable.class)
@ResponseBody
public String handlerException(Throwable e){
System.out.println(“全局的异常处理”);
return e.getMessage();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值