Spring Boot配置全局异常捕获

摘要:
=null&&“XMLHttpRequest”。等于);}}1.3.2验证是指前两个步骤中的验证。验证前,MyAjaxExceptionHandler。注意到了java。

1 SpringBoot配置全局的异常捕获

Spring Boot配置全局异常捕获第1张

项目的说明

  • 配置thymeleaf作为视图模板
  • ExceptionController.java模拟测试用
  • MyAjaxExceptionHandler.java捕获到异常以ajax形式返回
  • MyExceptionHandler.java捕获到异常以页面形式返回
  • ajaxerror.html这个是测试返回ajax异常的页面
  • error.html以页面形式返回的异常到这个页面

1.1 页面跳转形式

1.1.1 配置

MyExceptionHandler.java

@ControllerAdvice
public class MyExceptionHandler {
    public static final String ERROR_VIEW = "error";
    @ExceptionHandler(value = Exception.class)
    public Object errorHandler(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception {
        e.printStackTrace();
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", request.getRequestURL());
        mav.setViewName(ERROR_VIEW);
        return mav;
    }
}

1.1.2 验证

Spring Boot配置全局异常捕获第2张

1.2 ajax形式

1.2.1 配置

MyAjaxExceptionHandler.java

@RestControllerAdvice
public class MyAjaxExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    public JsonResult defaultErrorHandler(HttpServletRequest request, Exception e) throws Exception {
        e.printStackTrace();
        return JsonResult.errorException(e.getMessage());
    }
}

1.2.2 验证

注意在验证这一步时,把MyExceptionHandler.java这个类给注释了,因为如果不注释的话,两个类都会拦截Exception了。

Spring Boot配置全局异常捕获第3张

1.3 统一返回异常的形式

下面在MyExceptionHandler.java的基础上配置

1.3.1 配置

MyExceptionHandler.java

@RestControllerAdvice
public class MyExceptionHandler {
    public static final String ERROR_VIEW = "error";
    @ExceptionHandler(value = Exception.class)
    public Object errorHandler(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception {
        e.printStackTrace();
        if (isAjax(request)) {
            return JsonResult.errorException(e.getMessage());
        } else {
            ModelAndView mav = new ModelAndView();
            mav.addObject("exception", e);
            mav.addObject("url", request.getRequestURL());
            mav.setViewName(ERROR_VIEW);
            return mav;
        }
    }

    // 判断是否是ajax请求
    public static boolean isAjax(HttpServletRequest httpRequest) {
        String xRequestedWith = httpRequest.getHeader("X-Requested-With");
        return (xRequestedWith != null && "XMLHttpRequest".equals(xRequestedWith));
    }
}

1.3.2 验证

参照上两步的验证,验证前先把MyAjaxExceptionHandler.java给注了。

2 小结

# 注意区分
# 在类上的注解
@ControllerAdvice
@RestControllerAdvice
# 在方法上的注解
@ExceptionHandler(value = Exception.class)

# 在统一返回异常的形式配置中
类上的注解为@RestControllerAdvice
方法中返回ModelAndView对象就是返回页面,返回一个其他对象就会转换为json串,这样就实现了对页面请求和ajax请求中的错误的统一处理。

3 参考

免责声明:文章转载自《Spring Boot配置全局异常捕获》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇分布式任务队列--Celery的学习笔记ORACLE 创建多个游标并嵌套循环下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何在页面中获取到ModelAndView绑定的值

以下内容转自:https://blog.csdn.net/qq_16071145/article/details/51341052 springMVC中通过ModelAndView进行后台与页面的数据交互,那么如何在页面中获取ModelAndView绑定的值呢? 1、在JSP中通过EL表达式进行获取(比较常用) 后台:ModelAndView model...

SpringMVC(四)

1.restful风格(1)REST架构是一个抽象的概念,目前主要是基于HTTP协议实现,其目的是为了提高系统的可伸缩性,降低应用之间的耦合度,便于框架分布式处理程序。 (2)Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制 (3)在resultful风格中,...

SpringMVC基础知识

SpringMVC SpringMVC简介: SpringMVC是一个表示层框架,搭建真实环境 SpringMVC的使用方法:注解和配置。(注解为主) SpringMVC是Spring3.x的一个模块,其实就是用MVC提供的表示层框架。 SpringMVC对视图组件没有必然要求,不一定要使用jsp,struts1,struts2规定了只能用jsp。 Spr...

SpringMVC2

1       SpringMVC架构 1.1     Spring web mvc介绍 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来: 1.2     Web MVC mvc设计模式在b/s系统下应用: 1、  用户发起request请求至控制器(Contro...

java之拦截器Interceptor

1,拦截器的概念java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作。目前,我们需要掌握的主要...

java 数据设置和显示

1. 首先设置ModelAndView 的值 @Override public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { ModelAndView mv = new Mod...