需要以下两个类配合完成:

IoExceptionHandler.java(异常助手类)
IMoocJSONResult.java(实体类)
package com.blog.pojo;import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;import java.util.List;public class IMoocJSONResult {// 定义jackson对象private static final ObjectMapper MAPPER = new ObjectMapper();// 响应业务状态private Integer status;// 响应消息private String msg;// 响应中的数据private Object data;private String ok; // 不使用public static IMoocJSONResult build(Integer status, String msg, Object data) {return new IMoocJSONResult(status, msg, data);}public static IMoocJSONResult ok(Object data) {return new IMoocJSONResult(data);}public static IMoocJSONResult ok() {return new IMoocJSONResult(null);}public static IMoocJSONResult errorMsg(String msg) {return new IMoocJSONResult(500, msg, null);}public static IMoocJSONResult errorMap(Object data) {return new IMoocJSONResult(501, "error", data);}public static IMoocJSONResult errorTokenMsg(String msg) {return new IMoocJSONResult(502, msg, null);}public static IMoocJSONResult errorException(String msg) {return new IMoocJSONResult(555, msg, null);}public IMoocJSONResult() {}// public static LeeJSONResult build(Integer status, String msg) {
// return new LeeJSONResult(status, msg, null);
// }public IMoocJSONResult(Integer status, String msg, Object data) {this.status = status;this.msg = msg;this.data = data;}public IMoocJSONResult(Object data) {this.status = 200;this.msg = "OK";this.data = data;}public Boolean isOK() {return this.status == 200;}public Integer getStatus() {return status;}public void setStatus(Integer status) {this.status = status;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}/**** @Description: 将json结果集转化为LeeJSONResult对象* 需要转换的对象是一个类* @param jsonData* @param clazz* @return** @author leechenxiang* @date 2016年4月22日 下午8:34:58*/public static IMoocJSONResult formatToPojo(String jsonData, Class<?> clazz) {try {if (clazz == null) {return MAPPER.readValue(jsonData, IMoocJSONResult.class);}JsonNode jsonNode = MAPPER.readTree(jsonData);JsonNode data = jsonNode.get("data");Object obj = null;if (clazz != null) {if (data.isObject()) {obj = MAPPER.readValue(data.traverse(), clazz);} else if (data.isTextual()) {obj = MAPPER.readValue(data.asText(), clazz);}}return build(jsonNode.get("status").getIntValue(), jsonNode.get("msg").asText(), obj);} catch (Exception e) {return null;}}/**** @Description: 没有object对象的转化* @param json* @return** @author leechenxiang* @date 2016年4月22日 下午8:35:21*/public static IMoocJSONResult format(String json) {try {return MAPPER.readValue(json, IMoocJSONResult.class);} catch (Exception e) {e.printStackTrace();}return null;}/**** @Description: Object是集合转化* 需要转换的对象是一个list* @param jsonData* @param clazz* @return** @author leechenxiang* @date 2016年4月22日 下午8:35:31*/public static IMoocJSONResult formatToList(String jsonData, Class<?> clazz) {try {JsonNode jsonNode = MAPPER.readTree(jsonData);JsonNode data = jsonNode.get("data");Object obj = null;if (data.isArray() && data.size() > 0) {obj = MAPPER.readValue(data.traverse(),MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));}return build(jsonNode.get("status").getIntValue(), jsonNode.get("msg").asText(), obj);} catch (Exception e) {return null;}}public String getOk() {return ok;}public void setOk(String ok) {this.ok = ok;}
}
package com.blog.util;import com.blog.pojo.IMoocJSONResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@ControllerAdvice
public class IoExceptionHandler { //错误页面路径private final static  String IMOOC_ERROR_VIEW =  "/homepage/404";@ExceptionHandler(value=Exception.class)public  Object  errorHandler(HttpServletRequest request, HttpServletResponse response,Exception e) throws Exception{e.printStackTrace();if(isAjax(request)){return  IMoocJSONResult.errorException(e.getMessage());} else {ModelAndView mav = new ModelAndView();//返回错误异常mav.addObject("exception",e);//返回错误方法的路径mav.addObject("url",request.getRequestURL());//返回错误页面路径mav.setViewName(IMOOC_ERROR_VIEW);return mav;}}/** 判断异常是否是ajax异常* */public static boolean isAjax(HttpServletRequest httpRequest){return (httpRequest.getHeader("X-Requested-With") !=null && "XMLHttpRequest".equals(httpRequest.getHeader("X-Requested-With").toString() ) );}
}

下面测试一下:

404.html

<!doctype html>
<html lang="zh-CN" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>404错误!很抱歉,您要找的页面不存在</title>
<link rel="stylesheet" type="text/css" href="/homepage/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="/homepage/css/nprogress.css">
<link rel="stylesheet" type="text/css" href="/homepage/css/style.css">
<link rel="stylesheet" type="text/css" href="/homepage/css/font-awesome.min.css">
<link rel="apple-touch-icon-precomposed" href="/homepage/images/icon/icon.png">
<link rel="shortcut icon" href="/homepage/images/icon/favicon.ico">
<script src="/homepage/js/jquery-2.1.4.min.js"></script>
<script src="/homepage/js/nprogress.js"></script>
<script src="/homepage/js/jquery.lazyload.min.js"></script>
<!--[if gte IE 9]><script src="/homepage/js/jquery-1.11.1.min.js" type="text/javascript"></script><script src="/homepage/js/html5shiv.min.js" type="text/javascript"></script><script src="/homepage/js/respond.min.js" type="text/javascript"></script><script src="/homepage/js/selectivizr-min.js" type="text/javascript"></script>
<![endif]-->
<!--[if lt IE 9]><script>window.location.href='upgrade-browser.html';</script>
<![endif]-->
<style type="text/css">
.panel{padding:80px 20px 0px;min-height:500px;cursor:default;
}
.text-center {margin:0 auto;text-align: center;border-radius:10px;max-width:900px;-moz-box-shadow: 0px 0px 5px rgba(0,0,0,.3);-webkit-box-shadow: 0px 0px 5px rgba(0,0,0,.3);box-shadow: 0px 0px 5px rgba(0,0,0,.1);}
.float-left {float: left !important;
}
.float-right {float: right !important;
}
img {border: 0;vertical-align: bottom;
}
h2 {padding-top: 20px;font-size: 20px;
}
.padding-big {padding: 20px;
}
.alert {border-radius: 5px;padding: 15px;border: solid 1px #ddd;background-color: #f5f5f5;
}
</style>
</head><body class="user-select">
<header class="header"><nav class="navbar navbar-default" id="navbar"><div class="container"><div class="header-topbar hidden-xs link-border"><ul class="site-nav topmenu"><li><a href="tags.html">标签云</a></li><li><a href="readers.html" rel="nofollow">读者墙</a></li><li><a href="links.html" rel="nofollow">友情链接</a></li><li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" rel="nofollow">关注本站 <span class="caret"></span></a><ul class="dropdown-menu header-topbar-dropdown-menu"><li><a data-toggle="modal" data-target="#WeChat" rel="nofollow"><i class="fa fa-weixin"></i> 微信</a></li><li><li><a href="//shang.qq.com/wpa/qunwpa?idkey=225f72ba399ffadea6d01bb6c597bcb30a3ce14999d150746212d6646a5c4933" rel="nofollow"><i class="fa fa-qq"></i> QQ</a></li><li><a data-toggle="modal" data-target="#areDeveloping" rel="nofollow"><i class="fa fa-rss"></i> RSS</a></li></ul></li></ul><a href="javascript:;" class="login" rel="nofollow">Hi,您好~</a> </div><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#header-navbar" aria-expanded="false"> <span class="sr-only"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button></li><h1 class="logo hvr-bounce-in"><a href="/blog/index" title=""><img src="/homepage/images/logo.png" alt=""></a></h1></div><div class="collapse navbar-collapse" id="header-navbar"><ul class="nav navbar-nav navbar-right"><li class="hidden-index active"><a data-cont="首页" href="/blog/index">首页</a></li><li><a href="/blog/procedure">程序</a></li><li><a href="/blog/life">人生</a></li></ul><form class="navbar-form visible-xs" action="/Search" method="post"><div class="input-group"><input type="text" name="keyword" class="form-control" placeholder="请输入关键字" maxlength="20" autocomplete="off"><span class="input-group-btn"><button class="btn btn-default btn-search" name="search" type="submit">搜索</button></span> </div></form></div></div></nav>
</header>
<section class="container"><div class="panel"><div class="text-center"><h2><stong>404错误!很抱歉,您要找的页面不存在</stong></h2><div th:text="${url}"></div><div th:text="${exception.message}"></div><div><div class="float-left"> <img src="/homepage/images/404/left.gif" alt="" /><div class="alert"> 卧槽!页面不见了! </div></div><div class="float-right"> <img src="/homepage/images/404/right.png" width="260" class="hidden-xs" alt="" /> </div></div><div class="padding-big"> <a href="/blog/index" class="btn btn-primary">返回首页</a> <a href="" class="btn btn-default">保证不打死管理员</a> </div></div></div>
</section>
<footer class="footer"><div class="container"><p>&copy; 2016 <a href="">ylsat.com</a> &nbsp; <a href="#" target="_blank" rel="nofollow">豫ICP备20151109-1</a> &nbsp; &nbsp; <a href="http://www.mycodes.net/" target="_blank">源码之家</a></p></div><div id="gotop"><a class="gotop"></a></div>
</footer>
<!--微信二维码模态框-->
<div class="modal fade user-select" id="WeChat" tabindex="-1" role="dialog" aria-labelledby="WeChatModalLabel"><div class="modal-dialog" role="document" style="margin-top:120px;width:280px;"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="WeChatModalLabel" style="cursor:default;">微信扫一扫</h4></div><div class="modal-body" style="text-align:center"> <img src="/homepage/images/weixin.jpg" alt="" style="cursor:pointer"/> </div></div></div>
</div>
<!--该功能正在日以继夜的开发中-->
<div class="modal fade user-select" id="areDeveloping" tabindex="-1" role="dialog" aria-labelledby="areDevelopingModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="areDevelopingModalLabel" style="cursor:default;">该功能正在日以继夜的开发中…</h4></div><div class="modal-body"><img src="/homepage/images/baoman/baoman_01.gif" alt="深思熟虑" /><p style="padding:15px 15px 15px 100px; position:absolute; top:15px; cursor:default;">很抱歉,程序猿正在日以继夜的开发此功能,本程序将会在以后的版本中持续完善!</p></div><div class="modal-footer"><button type="button" class="btn btn-primary" data-dismiss="modal">朕已阅</button></div></div></div>
</div>
<!--<div id="rightClickMenu"><ul class="list-group rightClickMenuList"><li class="list-group-item disabled">欢迎访问博客</li><li class="list-group-item"><span>IP:</span>172.16.10.129</li><li class="list-group-item"><span>地址:</span>河南省郑州市</li><li class="list-group-item"><span>系统:</span>Windows10 </li><li class="list-group-item"><span>浏览器:</span>Chrome47</li></ul>
</div>-->
<script src="/homepage/js/bootstrap.min.js"></script>
<script src="/homepage/js/jquery.ias.js"></script>
<script src="/homepage/js/scripts.js"></script>
</body>
</html>

controller:


@Controller
@RequestMapping(value={"/blog"}
public class BlogController{@RequestMapping(value = {"/error"})public String error(){int a = 1/0;return "404";}}

此时启动工程,输入localhost/blog/error,因为1/0是错误的,所以跳转到错误页面,并显示错误方法和错误代码,至此异常捕捉成功。

SpringBoot配置全局的异常捕获相关推荐

  1. 《SpringBoot从菜鸟到老鸟》之SpringBoot 如何配置全局的异常捕获

    SpringBoot 如何配置全局的异常捕获 SpringBoot中自带的异常捕获机制返回的默认页面比较丑,对用户来说不够人性化. 所以这篇文章来讲解SpringBoot钟自定义全局异常捕获. 主要讲 ...

  2. ajax invoke error,配置全局的异常捕获时,走ajax请求下面报错

    org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [dispatcherSe ...

  3. SpringBoot(6) SpringBoot配置全局异常

    SpringBoot(6) SpringBoot配置全局异常 参考文章: (1)SpringBoot(6) SpringBoot配置全局异常 (2)https://www.cnblogs.com/pl ...

  4. springboot之全局处理异常封装

    springboot之全局处理异常封装 参考文章: (1)springboot之全局处理异常封装 (2)https://www.cnblogs.com/Purgeyao/p/11566469.html ...

  5. 随笔-springBoot配置全局跨域

    随笔-springBoot配置全局跨域 本文参考链接: 前端看视频学习vue使用axios进行Ajax请求,视频中使用nodemon创建的node-server,弄了半天一直说跨域.为了不浪费时间直接 ...

  6. SpringBoot日期格式转换,SpringBoot配置全局日期格式转换器

    文章目录 1. SpringBoot设置后台向前台传递Date日期格式 1.1 方式1:配置文件修改 1.2 方式2:在javabean实体类上加注解 I. `@JsonFormat`注解 II. ` ...

  7. SpringBoot配置全局日期格式转换器

    目录 1. `SpringBoot` 设置后台向前台传递 `Date` 日期格式 1.1. 方式一:配置文件修改 1.2. 方式二:在实体类上加注解 1.2.1. `@JsonFormat` 注解 1 ...

  8. SpringBoot配置全局异常捕获

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

  9. springBoot配置全局异常处理器

    一.自定义自己的异常类MyException.java public class MyException extends RuntimeException {private int code;publ ...

最新文章

  1. 2021-01-16交叉熵损失函数比均方误差损失函数优点在哪里
  2. 理解神经网络,从简单的例子开始(1)7行python代码构建神经网络
  3. 求助matlab分解质因数,Matlab
  4. LVS、Nginx 及 HAProxy 工作原理
  5. 树形结构 —— 树与二叉树
  6. vue项目实践教程3:中间大的五选项底部切换卡制作及相关问题解决
  7. Callback Functions Tutorial
  8. 糖尿病监测中国际通用的“金标准”
  9. CSS自定义动画@keyframes的使用
  10. android java 图形_java – 在Android中呈现的图像上的锯齿状边缘
  11. 谷歌浏览器F12快速定位网页上组件信息
  12. jsp内置对象request
  13. 【高项】第4章 项目整体管理与变更管理【知识点精华笔记】
  14. 记录第一次使用nvidia tao训练模型的过程
  15. Linux 启动项管理
  16. 新来的妹纸 rm -rf 把公司整个数据库删没了,整个项目组慌了~
  17. MySQL 8.0 初学与基础项目实践
  18. 最小生成树-Kruskal和Prim-JAVA代码
  19. ubuntu提示系统缺失字体:symbol、wingdings、wingdings2、wingdings3、webdings,WPS无法正确显示...
  20. 联想Y7000P 2019装Ubuntu双系统遇到的问题

热门文章

  1. python数据分析复盘——爬虫相关库
  2. axios+Vant+vue+jq重构jq月经周期计算器源代码(兼容移动端)
  3. 从游戏智能到疾病诊断,腾讯「绝悟」AI 从虚拟走向现实
  4. UVa 11178 Morley‘s Theorem(计算几何基础)
  5. 读书笔记之C Primer Plus 1
  6. top-1 and top-5 error rates
  7. 数字IC设计笔试题汇总(一)
  8. MATLAB圆柱和球绘制
  9. 自定义Android桌面小部件
  10. 我在 GitHub 上读清华