概述

项目开发中,经常会出现各种报错,但后台报错后,前台用户缺无法收到报错信息,因此需要捕获异常进行处理,但在代码中插入大量异常代码处理,会导致代码结构混乱,影响阅读与执行,SpringBoot提供了整合全局异常处理的注解。

**@RestControllerAdvice****@ControllerAdvice**其中@RestControllerAdvice=**@ControllerAdvice**+
@ResponseBody

实现原理:AOP

使用Spring核心之一AOP机制,面向切面编程。AOP可以在不影响源码的条件下,对方法进行扩展,降低了业务的耦合。

使用AOP中的异常通知,来进行全局异常管理。

使用**@RestControllerAdvice**注解与指定类型异常类型,使用**@ExceptionHandler**注解指定异常类型,参数为异常类型的字节码对象,例如:@ExceptionHandler(RuntimeException.class)只拦截运行时异常。

**@RestControllerAdvice**只拦截Controller层抛出的异常,Service层与dao层的异常将会抛给Controller,因此只需要拦截Controller层的异常。

实现方式

  1. package com.jt.aop;
  2. import com.jt.vo.SysResult;
  3. import org.springframework.web.bind.annotation.ExceptionHandler;
  4. import org.springframework.web.bind.annotation.RestControllerAdvice;
  5. @RestControllerAdvice
  6. public class SystemAOP {
  7. @ExceptionHandler(RuntimeException.class)//只拦截运行时异常
  8. public SysResult exception(Exception e) {
  9. //控制台打印异常
  10. e.printStackTrace();
  11. return SysResult.fail();
  12. }
  13. }

事务

事务可以保证数据的持久性、一致性、隔离性、原子性。所以需要在业务层执行数据库操作时应添加事务,保证后台服务器发生异常时,不会使数据出现混乱。

业务层控制事务的注解为@Transactional。其作用为:

  1. 发生异常时,会回滚,保持数据的一致性
  2. 若发生编译时异常,默认不回滚
  3. 属性说明:
    1.noRollbackFor() 遇到某种异常不回滚
    2.rollbackFor() 遇到某种异常回滚

因此需要在业务层的数据库增删改操作上添加事务控制注解。