概述
项目开发中,经常会出现各种报错,但后台报错后,前台用户缺无法收到报错信息,因此需要捕获异常进行处理,但在代码中插入大量异常代码处理,会导致代码结构混乱,影响阅读与执行,SpringBoot提供了整合全局异常处理的注解。
**@RestControllerAdvice**
、**@ControllerAdvice**
其中@RestControllerAdvice
=**@ControllerAdvice**
+@ResponseBody
。
实现原理:AOP
使用Spring核心之一AOP机制,面向切面编程。AOP可以在不影响源码的条件下,对方法进行扩展,降低了业务的耦合。
使用AOP中的异常通知,来进行全局异常管理。
使用**@RestControllerAdvice**
注解与指定类型异常类型,使用**@ExceptionHandler**
注解指定异常类型,参数为异常类型的字节码对象,例如:@ExceptionHandler(RuntimeException.class)
只拦截运行时异常。
**@RestControllerAdvice**
只拦截Controller层抛出的异常,Service层与dao层的异常将会抛给Controller,因此只需要拦截Controller层的异常。
实现方式
package com.jt.aop;
import com.jt.vo.SysResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class SystemAOP {
@ExceptionHandler(RuntimeException.class)//只拦截运行时异常
public SysResult exception(Exception e) {
//控制台打印异常
e.printStackTrace();
return SysResult.fail();
}
}
事务
事务可以保证数据的持久性、一致性、隔离性、原子性。所以需要在业务层执行数据库操作时应添加事务,保证后台服务器发生异常时,不会使数据出现混乱。
业务层控制事务的注解为@Transactional
。其作用为:
- 发生异常时,会回滚,保持数据的一致性
- 若发生编译时异常,默认不回滚
- 属性说明:
1.noRollbackFor() 遇到某种异常不回滚
2.rollbackFor() 遇到某种异常回滚
因此需要在业务层的数据库增删改操作上添加事务控制注解。