博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot配置全局异常捕获
阅读量:4634 次
发布时间:2019-06-09

本文共 2555 字,大约阅读时间需要 8 分钟。

1 SpringBoot配置全局的异常捕获

2018-06-13_001248.png

项目的说明

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

1.1 页面跳转形式

1.1.1 配置

MyExceptionHandler.java

@ControllerAdvicepublic 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 验证

2018-06-13_002649.png

1.2 ajax形式

1.2.1 配置

MyAjaxExceptionHandler.java

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

2018-06-13_002605.png

1.3 统一返回异常的形式

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

1.3.1 配置

MyExceptionHandler.java

@RestControllerAdvicepublic 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

你可能感兴趣的文章
Maven的安装
查看>>
angular初步认识一
查看>>
springmvc3.2+spring+hibernate4全注解方式整合(一)
查看>>
Elgg网站迁移指南
查看>>
素数筛法优化
查看>>
【转】常见系统中文字体的英文名
查看>>
installshield 注册dll
查看>>
京华同学聚会
查看>>
JSP--JavaBean
查看>>
成功将BlogEngine 1.5 升级到了BlogEngine 2.0
查看>>
【shell】创建长目录,目录存在则忽略,缺失则创建
查看>>
个人随笔、收藏——(包括技术、设计思想等)
查看>>
第一段冲刺_个人总结_5.2
查看>>
Usage and Idioms——Categories
查看>>
一: 建立Vue sampleproject
查看>>
数据结构之shell排序
查看>>
CodeForces 375D Tree and Queries
查看>>
牛客~~打篮球~~~模拟水题
查看>>
LeetCode-198. 打家劫舍
查看>>
5 -- Hibernate的基本用法 --2 1 Hibernate 下载和安装
查看>>