springboot统一异常处理@ControllerAdvice

一、注解@ControllerAdvice

- 用于修饰类,表示该类是Controller的全局配置类
- 在此类中,可以对Controller进行如下三种全局配置:
	**异常处理方案、绑定数据方案、绑定参数方案**

二、注解@ExceptionHandler

  • 用于修饰方法,该方法会在Controller出现异常后被调用,用于处理捕获到的异常

三、注解@ModelAttribute

  • 用于修饰方法,该方法会在Controller方法执行前被调用,用于Model对象绑定数据

四、注解@DataBinder

  • 用于修饰方法,该方法会在Controller方法执行前被调用,用于绑定参数的转换器

五、举例:

5.1创建异常页面:

在resources目录下的templates下创建error目录,并创建一个404.html页面和500.html页面。如图:在这里插入图片描述

5.2controller包下创建ExceptionAdvice.java

//annotations = Controller.class:只扫描Controller注解的bean
@ControllerAdvice(annotations = Controller.class)
public class ExceptionAdvice {
    private static final Logger logger = LoggerFactory.getLogger(ExceptionAdvice.class);

    @ExceptionHandler({Exception.class})
    public void handleException(Exception e, HttpServletRequest request, HttpServletResponse response) throws IOException {
        logger.error("服务器发送异常:"+e.getMessage());
        for(StackTraceElement element:e.getStackTrace()){
            logger.error(element.toString());
        }
//        获取请求方式(普通请求还是异步请求ajax)
        String xRquestedWith = request.getHeader("x-requested-with");
        if("XMLHttpRequest".equals(xRquestedWith)){
            //当请求为ajax异步请求的时候设置响应类型
            response.setContentType("application/plain;charset=utf-8");
            PrintWriter writer = response.getWriter();
            writer.write("服务器异常!");
        }else {
            //如果是普通请求则请求转发到错误500页面
            response.sendRedirect(request.getContextPath()+"/error");
        }
    }

}

5.4编写500错误跳转接口

 @RequestMapping("/error")
    public String getErrorPage(){
        return "/error/500";
    }

5.4测试

启动项目,浏览器输入一个不存在的接口:http://localhost:8080/user/addd自动跳转到404错误页面在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值