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

Spring Boot配置全局异常捕获的更多相关文章

  1. Spring Boot 中全局异常处理器

    Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法.等价于Springmvc中的异常处理器. 步骤一:基于前面的springBoot入门小demo修改 步骤二:修改HelloCon ...

  2. spring boot 配置全局日期类型转换器

    1. 首先自定义一个类型转换器 import org.springframework.core.convert.converter.Converter; import org.springframew ...

  3. Spring boot之全局异常捕捉

    在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...

  4. .NET Core整合log4net以及全局异常捕获实现

    在使用log4net之前先安装log4net.这里操作很简单,通过nuget下载并安装log4net很方便.如下图. log4net配置 <?xml version="1.0" ...

  5. spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获

    spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获 当你的某个控制器内的某个方法报错,基本上回显示出java错误代码,非常不友好,这 ...

  6. 使用spring利用HandlerExceptionResolver实现全局异常捕获

    最近一直没有时间更新是因为一直在更新自己使用的框架. 之后会慢慢带来对之前使用的spring+mvc+mybatis的优化. 会使用一些新的特性,实现一些新的功能. 我会尽量分离业务,封装好再拿出来. ...

  7. springboot(二 如何访问静态资源和使用模板引擎,以及 全局异常捕获)

    在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static / ...

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

    异常,异常 我们一定要捕获一切该死的异常,宁可错杀一千也不能放过一个! 产品上线后的异常更要命,一定要屏蔽错误内容,以免暴露敏感信息! 在用Spring MVC开发WEB应用时捕获全局异常的方法基本有 ...

  9. SpringBoot图文教程15—项目异常怎么办?「跳转404错误页面」「全局异常捕获」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...

随机推荐

  1. 『现学现忘』Docker基础 — 37、ONBUILD指令介绍

    目录 1.ONBUILD指令说明 2.演示ONBUILD指令的使用 3.补充:crul命令解释 1.ONBUILD指令说明 ONBUILD是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COP ...

  2. c++中“::”和“:”啥意思

    c++中"::"和":"啥意思 (1)"::"  1)类作用域操作符."::"指明了成员函数所属的类.如:M::f(s) ...

  3. 2022首场MASA技术团队黑客松赛事大赛完美落幕!精彩集锦

    Masa技术团队在2021年创立,这一年我们团队发布了我们第一个产品,Masa Blazor.登上了.NET Conf China,我们承诺,开源我们的产品,为开源社区增砖加瓦,一路上收获技术社区文章 ...

  4. DOM 小总结

    DOM 是什么 文档对象模型,是针对 HTML 和 XML 文档的一个 API (应用程序编程接口), 描绘了一个层次化的节点树. D: document 当 web 浏览器浏览一个页面的时候,DOM ...

  5. AS之去掉顶部标题栏

    在该目录下,将原本<style name的这行代码改为: <style name="Theme.Tongxunlu" parent="Theme.Materi ...

  6. jsp+servlet上传excel并将数据导入到数据库表的实现方法

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 自定义API(Jar包)的创建与使用(简单实现案例)

    @ 目录 学习内容 1. 自定义工具类 2. 导出jar 3. 加载Jar包 4. 调用自定义的API方法 总结 学习内容 1. 自定义工具类 新建一个java项目,然后创建包和工具类StringUt ...

  8. this和super的区别和应用

    A:this和super都代表什么 * this:代表当前对象的引用,谁来调用我,我就代表谁 * super:代表当前对象父类的引用B:this和super的使用区别 * a:调用成员变量  * th ...

  9. 小程序申请测试appid

    话不多说,直接上图:  1. 登录微信官方文档: https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.html  2. ...

  10. vue点击按钮复制文本框内容

    1.npm进行安装 npm install clipboard --save 2.在需要使用的组件中import 引用方法:import Clipboard from 'clipboard'; 3.添 ...