概述
项目开发中,经常会出现各种报错,但后台报错后,前台用户缺无法收到报错信息,因此需要捕获异常进行处理,但在代码中插入大量异常代码处理,会导致代码结构混乱,影响阅读与执行,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;@RestControllerAdvicepublic class SystemAOP {@ExceptionHandler(RuntimeException.class)//只拦截运行时异常public SysResult exception(Exception e) {//控制台打印异常e.printStackTrace();return SysResult.fail();}}
事务
事务可以保证数据的持久性、一致性、隔离性、原子性。所以需要在业务层执行数据库操作时应添加事务,保证后台服务器发生异常时,不会使数据出现混乱。
业务层控制事务的注解为@Transactional。其作用为:
- 发生异常时,会回滚,保持数据的一致性
- 若发生编译时异常,默认不回滚
- 属性说明:
1.noRollbackFor() 遇到某种异常不回滚
2.rollbackFor() 遇到某种异常回滚
因此需要在业务层的数据库增删改操作上添加事务控制注解。
