JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

若依开发框架解析笔记(10)-全局异常的处理

wys521 2025-03-08 01:19:20 精选教程 45 ℃ 0 评论

在开发的过程中,会遇到大量的各种各样的异常需要去处理,并且在前后端分离的开发中,还有存在如何与前端约定,要让前端分清楚什么样的异常应该展现什么的内容提示给用户,一般不建议直接把一些框架内部抛出的异常直接展现到前台页面上去,都是要进行统一格式的封装,以便前端进行统一的处理。

一般来SSM框架的异常在每一层都会有不同的异常,比如数据层会有和数据库交互出现的异常。业务层会有一些业务报错,控制层中也会出现一些请求路径错误这些异常。

捕获异常可以使用try,catch代码块来捕获异常,不过这样子会造成代码出现大量的重复代码。所以,若依框架里面使用了SpringMVC自带的全局异常处理器来处理各种异常。通过使用@RestControllerAdvice来对controller层里面的异常统一进行处理。使用的方法也是相对比较固定的。

下面的代码块是里面的一个例子。AccessDeniedException这个异常是springSecurity里面的异常,@ExceptionHandler()这个注解表明,一但捕获到括号里面的异常,将终止原来控制层方法的执行,并且转入当前的方法执行,当前方法里面会对异常做处理,获取一些信息,例如例子中的uri请求,然后通过封转好的ajax请求返回给前台进行处理。

    /**
     * 权限校验异常
     */
    @ExceptionHandler(AccessDeniedException.class)
    public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request)
    {
        String requestURI = request.getRequestURI();
        log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage());
        return AjaxResult.error(HttpStatus.FORBIDDEN, "没有权限,请联系管理员授权");
    }

框架的作者在common这个工程中自定义了很多类型的异常。比如用户信息类的异常,业务异常,工具类异常等,我们后续二次开发的时候还可以根据自己的需求自行添加。

最后总结一下全局异常的使用大致流程,首先通过了SpringMVC中自带的全局异常处理器,捕获到控制层中的异常,然后进行后续的对异常的处理,并且把封装好的结果返回给前台。如果是在service层中的异常,则还需使用try catch捕获,然后返回给对应的控制层。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表