SpringBoot配置全局异常捕获

1 SpringBoot配置全局的异常捕获

项目的说明

  • 配置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 验证

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了。

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 参考

原文地址:https://www.cnblogs.com/okokabcd/p/9175797.html

时间: 2024-10-09 23:38:28

SpringBoot配置全局异常捕获的相关文章

SpringBoot(6) SpringBoot配置全局异常

1.全局异常 @ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody //捕获全局异常,处理所有不可知的异常 @ExceptionHandler(value=Exception.class) 1 @RestControllerAdvice 2 public class CustomExtHandler { 3 4 private static final Logger LOG = LoggerFactor

【spring】-- springboot配置全局异常处理器

一.为什么要使用全局异常处理器? 什么是全局异常处理器? 就是把错误异常统一处理的方法. 应用场景: 1.当你使用jsr303参数校验器,如果参数校验不通过会抛异常,而且无法使用try-catch语句直接捕获,这时可以使用全局异常处理器来捕捉该异常. 2.当你自定义了一个异常类,可以在全局异常处理器中来捕捉该异常.(当然也可以直接在抛出异常处直接捕获,但是这样需要在每一个抛出的地方都写一次捕获代码,看起来不够美观且复用性不强,其他异常同理). 所有异常都可以在全局异常处理器中捕获进行统一处理 二

springboot配置全局异常

第一步 controller中 package cn.itcast.springboot.controller; import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody; import cn.itcast.spri

springboot编程之全局异常捕获

springboot编程之全局异常捕获 1.创建GlobalExceptionHandler.java,在类上注解@ControllerAdvice, 在方法上注解@ExceptionHandler(value = Exception.class),Exception.class表示拦截所有的异常信息 package com.imooc.web.controller; import com.imooc.exception.UserNotExistException; import org.spr

Spring-MVC开发之全局异常捕获全面解读(转)

异常,异常.我们一定要捕获一切该死的异常,宁可错杀一千也不能放过一个!产品上线后的异常更要命,一定要屏蔽错误内容,以免暴露敏感信息!在用Spring MVC开发WEB应用时捕获全局异常的方法基本有两种: WEB.XML,就是指定error-code和page到指定地址,这也是最传统和常见的做法 用Spring的全局异常捕获功能,这种相对可操作性更强一些,可根据自己的需要做一后善后处理,比如日志记录等. SO,本文列出Spring-MVC做WEB开发时常用全局异常捕获的几种解决方案抛砖引玉,互相没

自定义全局异常捕获

原文:http://blog.csdn.net/jinzhencs/article/details/51700009 第一种:实现HandlerExceptionResolver 注意: 把错误码 重设成200,不然还是返回的异常信息. 注解@Compoment交由spring创建bean 之后就能愉快的返回自己的错误码了. 或者记录错误日志. /** * 全局异常捕获 * @author Mingchenchen * */ @Component public class GlobleExcep

Spring-MVC开发之全局异常捕获全面解读

在用Spring MVC开发WEB应用时捕获全局异常的方法基本有两种, WEB.XML,就是指定error-code和page到指定地址,这也是最传统和常见的做法 用Spring的全局异常捕获功能,这种相对可操作性更强一些,可根据自己的需要做一后善后处理,比如日志记录等. SO,本文列出Spring-MVC做WEB开发时常用全局异常捕获的几种解决方案抛砖引玉 互相没有依赖,每个都可单独使用! 定义服务器错误WEB.XML整合Spring MVC web.xml <error-page> <

Configure、中间件与ErrorHandlingMiddleware全局异常捕获

一.Configure Startup.cs中的Configure方法主要是http处理管道配置.中间件和一些系统配置,其中 IApplicationBuilder: 定义一个类,该类提供配置应用程序请求的机制管道.通过IApplicationBuilder下的run.use方法传入管道处理方法.这是最常用方法,对于一个真实环境的应用基本上都需要比如权限验证.跨域.异常处理等. IHostingEnvironment:提供有关正在运行的应用程序的web托管环境的信息 简单来说Configure方

MVC 好记星不如烂笔头之 ---&gt; 全局异常捕获以及ACTION捕获

public class BaseController : Controller { /// <summary> /// Called after the action method is invoked. /// </summary> /// <param name="filterContext">Information about the current request and action.</param> protected ov