一、为什么要在后端中做异常捕获处理?
当我们的后端发生未知的系统错误,比如发生了Exception这个异常,如果我们没有对这个异常进行捕获处理的话,那么返回前端的就会是服务器500啊之类的,就将我们原生的错误直接暴露在了我们的用户面前,这样做是非常不雅观的。
比如我在后端有一个接口:
我在里面写了一个错误。然后我们前端去访问这个接口试试
我这里vue-admin-template中已经做好了对后端响应的处理,这样做已经比直接浏览器变成错误页面,报500错误好太多了。
但是我们看到前端还是不美观啊,那怎么做,我们想要的效果应该是
上面图片中提示框中信息是后台返回给前台的错误信息啊,比如什么“没有权限”之类的
二、后端如何捕获异常?
新建一个类用于捕获异常
@RestControllerAdvice
@Slf4j
public class DefaultExecption{
//这里写上我们要捕获的异常类
@ExceptionHandler(ArithmeticException.class)
public Result arithmeticExceptionHandler(ArithmeticException e, HttpServletRequest request){
String uri = request.getRequestURI();
log.error("请求地址:"+uri+"发生异常"+e.getMessage());
return Result.fail(e.getMessage());
}
//后面还能继续写其他要捕获的异常,最好把最大的异常Execption加在末尾,这样不会漏过任何异常
}
然后我们前端去访问一下试试:
这里错误信息发生了变化,当然/by zero对于客户来讲不一定知道啥意思,所以我们可以将最后改成
Result.fail("服务器发生了错误")
这样处理好看多了。
另外看我们的后端:
是不是也没有直接的报错信息了,这样美观多了