我们在使用springboot进行日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一般都是利用 try ,catch 的方式处理异常或者 throw,throws 的方式抛出异常不管。这种方法对于程序员来说处理也比较麻烦,所以我们希望既能方便程序员编写代码,不用过多的自己去处理各种异常编写重复的代码又能提升用户的体验,这时候全局异常处理就显得很重要也很便捷了,是一种不错的选择。
之前我们都在web层直接抛出,即controller类中。
我们现在统一进行处理,还是使用AOP来实现。将这个类放在common包下
//统一的异常处理实现类
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 针对请求 404 处理
这个404是指的是访问spring后,解析控制器地址找不到
*/
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(NoHandlerFoundException.class)
public CommonResult noHandleFoundException(NoHandlerFoundException e) {
CommonResult commonResult = new CommonResult(404,e.getMessage());
return commonResult;
}
/**
* 针对其他异常处理,默认是所有方法出现异常都会走到这里,通过注解标签来实现
*/
@ExceptionHandler(Exception.class)
public CommonResult globalException(Exception e) {
CommonResult commonResult = new CommonResult(500,e.getMessage());
//出现异常了,进行异常日志信息打印
Logger logger= LoggerFactory.getLogger(LoginController.class);
logger.error("系统出错:"+e.getStackTrace().toString());
return commonResult;
}
}