Spring Boot配置全局异常捕获
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配置全局异常捕获的更多相关文章
- Spring Boot 中全局异常处理器
Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法.等价于Springmvc中的异常处理器. 步骤一:基于前面的springBoot入门小demo修改 步骤二:修改HelloCon ...
- spring boot 配置全局日期类型转换器
1. 首先自定义一个类型转换器 import org.springframework.core.convert.converter.Converter; import org.springframew ...
- Spring boot之全局异常捕捉
在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...
- .NET Core整合log4net以及全局异常捕获实现
在使用log4net之前先安装log4net.这里操作很简单,通过nuget下载并安装log4net很方便.如下图. log4net配置 <?xml version="1.0" ...
- spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获
spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获 当你的某个控制器内的某个方法报错,基本上回显示出java错误代码,非常不友好,这 ...
- 使用spring利用HandlerExceptionResolver实现全局异常捕获
最近一直没有时间更新是因为一直在更新自己使用的框架. 之后会慢慢带来对之前使用的spring+mvc+mybatis的优化. 会使用一些新的特性,实现一些新的功能. 我会尽量分离业务,封装好再拿出来. ...
- springboot(二 如何访问静态资源和使用模板引擎,以及 全局异常捕获)
在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static / ...
- Spring-MVC开发之全局异常捕获全面解读
异常,异常 我们一定要捕获一切该死的异常,宁可错杀一千也不能放过一个! 产品上线后的异常更要命,一定要屏蔽错误内容,以免暴露敏感信息! 在用Spring MVC开发WEB应用时捕获全局异常的方法基本有 ...
- SpringBoot图文教程15—项目异常怎么办?「跳转404错误页面」「全局异常捕获」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...
随机推荐
- Numpy常用random随机函数汇总
Numpy常用random下的随机函数汇总 官方文档地址:https://docs.scipy.org/doc/numpy-1.14.0/reference/routines.random.html ...
- 浅析Node与Element
起因 起因有二: 在看winter老师的分享:<一个前端的自我修养>时,有注意到这么一幅图,里面有写childNode和children属性. 昨天有学弟问起我,能否自己定义一个所有元素节 ...
- Kurento安装与入门12——Show DataChannel
Show DataChannel 本示例允许用户在文本框中输入任意文字,输入的文字将以字幕的形式显示在传回的视频中. 官网文档 [Show DataChannel[1] 首先从github上获取代码( ...
- 获取bootstrap模态框点击的对应项(e.relatedTarget.dataset)
//获取绑定的自定义属性值<ul> <li data-toggle="modal" data-index="电表1111" data-targ ...
- C语言 之 多线程编程
一.基础知识 计算机的核心是CPU,承担了所有的计算任务. 操作系统是计算机的管理者,负责任务的调度.资源的分配和管理,统领整个计算机硬件. 应用程序则是具有某种功能的程序,程序是运行于操作系统之上的 ...
- HttpRequest.Path与HttpRequest.PathBase区别
源自stackoverflow
- vs技巧 - 调试asp.net core源码
学习asp.net core的方式除了看官方文档,看源码是也是一种很好的方式.本文介绍一种方法,简单配置vs,无需第三方插件就可以将asp.net core的源码链接自己的项目,随时穿梭于core的源 ...
- Django高级之-缓存
一 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消 ...
- LC-19
19. 删除链表的倒数第 N 个结点 思路基本直接出来,双指针,IndexFast 和 IndexSlow 中间相隔 N - 1, 这样 IndexFast 到了最后,IndexSlow 自然就是倒数 ...
- SpringCloud Function SpEL注入
SpringCloud Function SpEL注入 漏洞分析