大家好我是废材,今天我给大家带来的是全局异常处理器
什么是全局异常处理器
对于我们开发项目中我们经常会遇到空指针异常,校验数字不合法,该数据不能删除等runtimeException,如果我们对于每个异常都要try-catch的话,这样会非常繁琐,代码臃肿所以就有了全局异常处理器来集中处理异常。
如何自定义全局异常处理器
1.编写异常处理器类添加RestControllerAdvice注解
RestControllerAdvice = @Controller + @ResponseBody
@ControllerAdvice是一个用于定义全局控制器增强(即全局异常处理和全局数据绑定)的注解。通过使用@ControllerAdvice,我们可以将异常处理和数据绑定逻辑集中到一个类中,避免在每个控制器中重复编写相同的异常处理代码。
@ResponseBody是用于指示控制器方法返回的对象将被直接写入响应体中的注解。它告诉Spring将方法的返回值序列化为JSON或其他适当的响应格式,并将其作为HTTP响应的主体返回给客户端。
3.在异常处理器类里编写一个方法添加@ExceptionHander注解
@ExceptionHander: 它用于标识一个方法,使其能够处理特定类型的异常。当控制器方法抛出指定类型的异常时,Spring会自动调用被@ExceptionHandler注解的方法来处理该异常
@ExceptionHandler
//修饰那种类型异常我们需要捕获处理,这里是对于运行时异常的集中捕获处理
public Result exceptionHandler(RuntimeException ex){
log.error("异常信息:{}", ex.getMessage());
return Result.error(ex.getMessage());
}
像这里我就是把异常信息规范处理返回给前端用户让用户知道自己是账户没输入对,还是密码错了
4.就可以自定义异常类了
接下来我们就可以自定义异常类了,登录时产生的异常(LoginFailedExceeption),注册时产生的异常(AccountNotFoundException)等等,但是大家也不要担心这些异常类里面实现也很简单,因为全局异常处理器已经帮我们对于异常做出了处理,我们只需要继承实现就可以了,这样只是为了更加规范
//这个是登录失败异常类
public class LoginFailedException extends BaseException{
//对于登录比如用户密码没输入正确我们只需要使用这个异常给出提示信息就可以了
public LoginFailedException(String msg){
super(msg);
}
}
//使用方法
if(password.equals(newPassword)){
//直接把信息返回给前端
throw new LoginFailedException("用户密码错误");
}
我是废材,如果觉得有用的话麻烦点个关注,我会持续更新有用的编程知识!!