背景需求:
在开发项目中对一些在会出现的异常或者说是需要给前端响应后端异常时或者说给客户端响应一些友好提示时,一般来说有两种方式:1.try catch 自行对异常进行捕捉;2.在项目中创建全局处理器,对整个项目的全局异常进行捕捉然后响应给前端或进行相应需求处理
具体步骤:
1.在项目的公共功能包目录下编写GlobalExceptionHandler全局异常处理器类,在类上添加@RestControllerAdvice注解(表示被标识的类可以作用于项目中所有使用@Restmapping注解包括reful风格注解的方法; 例:
/**
* @author Upjqs
* 全局异常处理器
*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
//一个方法处理一个特定的异常(异常尽量精确)
/**
* 员工新增,账号重复异常,响应友好提示
* @param ex 异常变量名
* @return String字符串类型的r响应结果
*/
@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
public R<String> SQLIntegrityConstraintViolationException(SQLIntegrityConstraintViolationException ex) {
//将错误信息输出到控制台 异常对象调用P开头方法 打印一堆跟踪调试
ex.printStackTrace();
log.info("错误信息为:{}", ex.getMessage());
//在前端或者客户端返回友好提示
return R.error("该账户已存在");
}
}
2.上面编写全局异常类后,在类中编写一个处理异常的方法,然后使用@ExceptionHandler注解进行标识,@ExceptionHandler注解表示被标识的方法可以处理项目中其他被@RestControllerAdvice作用的所有方法中的异常;一般会在@ExceptionHandler注解的参数中定义所需处理的异常类的class;
代码示例中的异常对象调用的 printStackTrace方法为在控制台打印异常信息
3.在方法中编写处理异常的需求代码:例 响应友好信息给前端.