spring boot项目中如何统一处理异常

spring boot处理异常的方式有很多种,各自都有不同的优点和缺点,之前看了很多关于spring boot异常处理的博客,把我人都看晕了,越看越糊涂,不知道该用哪种异常处理方式好,最终在一个项目视频教程下看到了一个异常处理的解决方案,觉得挺好用的,在这里分享给大家

处理异常的类

该异常处理的核心是 @ControllerAdvice,@ExceptionHandler,它会拦截所有Controller层的异常

后端部分

自定义异常处理类

package com.jizhu.blog.exceptionHandler;
import...
/**
 * 此注解只扫描Controller层的异常
 */
@ControllerAdvice(annotations = Controller.class)
public class ExceptionHander{
    /**
     * 日志
     */
    private static final Logger logger= LoggerFactory.getLogger(ExceptionHander.class);

    @ExceptionHandler(Exception.class)
    public void exceptionHanders(HttpServletRequest request, Exception e, HttpServletResponse response) throws IOException {
        /**
         * 记录日志
         */
        logger.error("服务器发生异常:"+e.getMessage());
        for (StackTraceElement stackTraceElement : e.getStackTrace()) {
            logger.error(stackTraceElement.toString());
        }

        /**
         * 根据请求类型处理异常
         */
        String xRequestedWith = request.getHeader("x-requested-with");
        if("XMLHttpRequest".equals(xRequestedWith)){
            /**
             * 此请求为Ajax请求
             * 使用json格式返回
             */
            ObjectMapper mapper =new ObjectMapper();
            response.setContentType("application/json;charset=utf-8");
            mapper.writeValue(response.getOutputStream(),"服务器异常");
        }else{
            /**
             * 正常request请求
             * 跳转到500页面
             */
            response.sendRedirect(request.getContextPath()+"/500");
        }

    }
}

该异常处理类的特点就是能够根据请求是否为Ajax来进行不同的处理,服务端代码错误统一跳转自定义的500页面,如果客户端输入路径错误或者资源已经删除那么自动跳转自定义404页面,如果是Ajax请求那么同样也会以Json格式返回。

Controller层页面跳转处理
在这里插入图片描述

前端部分

自定义404页面必须按照此目录结构放,resource->templates->error->404.html,这样spring boot才会自动跳转到404页面,自定义500页面就可以随便放了,因为需要在Controller层跳转,不过我个人就跟404.html放在同一级目录了
自定义错误页面目录结构
在这里插入图片描述

测试Demo

500错误测试

页面
在这里插入图片描述
控制台
在这里插入图片描述
日志
在这里插入图片描述

404错误测试
页面
在这里插入图片描述
Ajax请求测试

页面
在这里插入图片描述
控制台
在这里插入图片描述
日志
在这里插入图片描述

完事儿~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值