今天介绍一种处理异常的方法–全局异常统一处理
什么是全局异常统一处理:在独立的一个类中,定义一套对各种异常的处理机制,然后用@ControllerAdvice注解该类,统一对不同位置的不同异常进行处理。方便开发者维护等。使用方法:
1.自定义异常类
@Data
@NoArgsConstructor
public class GlobalException extends Exception{
private String code;
public GlobalException(String message, String code) {
super(message);
this.code = code;
}
}
2.使用ControllerAdvice,控制器增强
@ControllerAdvice
@RestController
public class ecx {
@ExceptionHandler(GlobalException.class)
public ResultInfo handle(Exception e){
ResultInfo result = new ResultInfo();
if (e instanceof GlobalException) {
e = (GlobalException) e;
result.setCode(((GlobalException) e).getCode());
}
result.setMsg("系统异常信息:"+e.getMessage());
return result;
}
}
3.使用
@RestController
@RequestMapping("/demo")
public class demo {
@RequestMapping("/test")
public ResultInfo test() throws GlobalException {
int v = (int) (Math.random()*2);
//简单测试,假装这是处理后d逻辑
if(v==1)
throw new GlobalException("密码错误","201");
if(v==0)
throw new GlobalException("用户名错误","201");
else
throw new GlobalException("系统异常","201");
}
}
所以在这个点里面主要有几个注解需要我们理解。
@ControllerAdvice
这个注解主要是拿来声明一个异常处理类,所有产生的异常都会提交到·这里进行处理ExceptionHandler
这个注解主要是用来处理异常的,比如存在NPE异常等,我们就可以使用@ExceptionHnadler(NullPointException.class)
,其他的以此类推。