1. 全局事务处理
@Transactional(rollbackFor= RuntimeException.class) 默认就是拦截运行时异常
下面是不拦截运行时异常 通常是不需要写的
2. 全局异常处理
package sso.exception;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import sso.vo.SystemResult;
import java.sql.SQLException;
/**
* 标示该类是全局异常处理机制
* 通知: aop技术, 解决特定的问题
* 只拦截controller层抛出的异常
*/
@RestControllerAdvice//返回值都是json串
//@ControllerAdvice
@Slf4j
public class SystemExceptionHandler {
/**
* 需要为全局异常定义一个方法
* 说明 需要为全局异常定义一个方法
* 要求 返回的统一的业务数据 sysResult
* 拦截 指定遇到某种异常实现aop处理
*/
//当程序报运行时异常, 执行这个方法(Exception.class 过分了)
@ExceptionHandler({RuntimeException.class, SQLException.class})
public SystemResult fail(Exception e){
//多就 Obj
log.error(e+"");
e.printStackTrace();
return SystemResult.error("统一异常机制捕获--->"+e);
}
}
{
"success": false,
"code": "500",
"msg": "统一异常机制捕获--->java.lang.ArithmeticException: / by zero",
"data": null,
"timestamp": 1641373179245
}
测试: 就是 随便找个地方 写一个 int i = 1/0 ; 即可快去试试吧