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://gitee.com/yysue/tutorials-java/tree/master/springboot-starter

转载于:https://www.cnblogs.com/okokabcd/p/9175797.html

Spring Boot配置全局异常捕获相关推荐

  1. SpringBoot配置全局异常捕获

    SpringBoot中自带的异常捕获机制返回的默认页面比较丑,对用户来说不够人性化.所以这篇文章来讲解SpringBoot钟自定义全局异常捕获. 本文的源码已经上传GitHub:https://git ...

  2. spring框架做全局异常捕获_springboot springmvc抛出全局异常的解决方法

    springboot中抛出异常,springboot自带的是springmvc框架,这个就不多说了. springmvc统一异常解决方法这里要说明的是.只是结合了springboot的使用而已.直接上 ...

  3. spring框架做全局异常捕获_SpringBoot全局异常处理与定制404页面

    一.错误处理原理分析 使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错 ...

  4. spring框架做全局异常捕获_@ControllerAdvice注解(全局异常捕获)

    背景 @ControllerAdvice 注解 通常用于定义@ExceptionHandler, @InitBinder和@ModelAttribute 适用于所有@RequestMapping方法的 ...

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

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

  6. Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获

    Spring boot异常统一处理方法:@ControllerAdvice注解的使用.全局异常捕获.自定义异常捕获 参考文章: (1)Spring boot异常统一处理方法:@ControllerAd ...

  7. Spring 全局异常捕获

    引言 前后端分离开发,后台有时候会出现不可预知的异常(运行时异常),在实际生产中通常需要统一返回符合一定响应结构的异常信息给前端,这一方面可以避免用户看到后台的报错信息,一方面也是保护后端程序免受恶意 ...

  8. Java 捕获 mybatis异常_3 springboot集成mybatis和全局异常捕获

    mybatis有两种方式,一种是基于XML,一种是基于注解 springboot集成mybatis 首先先创建表,这里都简化了 DROP TABLE IF EXISTS `user`; CREATE ...

  9. Spring Boot 2.0 配置图文教程第 2 章 Spring Boot 配置## 书信息 demo.book.name=[Spring Boot 2.x Core Action] demo.b

    本章内容 1.自定义属性快速入门 2.外化配置 3.自动配置 4.自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 第 2 章 Spring B ...

最新文章

  1. python打印日志
  2. 逐行计算、逐行递延、逐行更新
  3. django-pagination---七步教你实现Django网站列表自动分页
  4. 指针-指向函数指针数组的指针
  5. Java 监听器,国际化
  6. python numpy常用操作、Numpy 多维数组、矩阵相乘、矩阵乘以向量
  7. ubuntu如何安装python36_在Ubuntu 16.04下安装Python3.6,ubuntu1604,Python36
  8. 前端可视化开发--liveload
  9. C语言初学者编程游戏(猜数字)
  10. rtx服务器端消息监控插件,RTX2006消息监控插件
  11. Linux 编jpeg函数,JPEG图形库:libjpeg,在LINUX下如何将jpg转换成bmp
  12. (十三)ATP应用测试平台——springboot集成kafka案例实战
  13. 芝麻信用分800+的技巧,get!
  14. ns-allinone-3.X(simulator模拟器)简单配置
  15. 电路设计实例(防止DC电源反接的方法)
  16. Azure 媒体服务可将优质内容传输至 Apple TV
  17. 数据库,数据库管理系统
  18. C++11 文件读写(vs2019 安装配置boost库)
  19. JS如何手写new(一看就懂)
  20. Office 2016安装失败解决方案

热门文章

  1. 【翻译】Ext JS 6 Beta发布
  2. Xamarin只言片语系列
  3. ThinkPad -- Intel 无线网卡网络连接方法限制及无法用 Fn + F5 控制的问题
  4. 使用MasterPage遇到的问题
  5. arduino 呼吸灯_如何改善您的Arduino呼吸机:用于临时COVID-19呼吸机设计的RTS和SCS简介...
  6. JavaScript的“ this”通过成立一个高中乐队来解释
  7. linux mysql清除数据库所有表_MySQL修复指定数据库下的所有表
  8. 更换VC后DDC提示证书不可用
  9. 关于虚拟化技术软硬件兼容问题的探讨
  10. Python的 if .else.elif语句详解