SpringBoot2.0 基础案例(03):配置系统全局异常映射处理
本文源码:GitHub·点这里 || GitEE·点这里
一、异常分类
这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常。
1、业务异常
业务异常主要是一些可预见性异常,处理业务异常,用来提示用户的操作,提高系统的可操作性。
常见的业务异常提示:
1)请输入xxx
2)xxx不能为空
3)xxx重复,请更换
2、系统异常
系统异常主要是一些不可预见性异常,处理系统异常,可以让展示出一个友好的用户界面,不易给用户造成反感。如果是一个金融类系统,在用户界面出现一个系统异常的崩溃界面,很有可能直接导致用户流失。
常见的系统异常提示:
1)页面丢失404
2)服务器异常500
二、解决应用启动后404界面
1、引入页面Jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2、自定义首页接口
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping("/")
public String index(ModelMap modelMap) {
modelMap.addAttribute("name","知了一笑") ;
return "index";
}
}
3、首页界面
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<h1 th:text="${name}"></h1>
</body>
</html>
4、运行效果
三、SpringBoot2.0中异常处理
1、项目结构图
2、自定义业务异常类
public class ServiceException extends Exception {
public ServiceException (String msg){
super(msg);
}
}
3、自定义异常描述对象
public class ReturnException {
// 响应码
private Integer code;
// 异常描述
private String msg;
// 请求的Url
private String url;
// 省略 get set 方法
}
4、统一异常处理格式
1)两个基础注解
@ControllerAdvice 定义统一的异常处理类
@ExceptionHandler 定义异常类型对应的处理方式
2)代码实现
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
@ControllerAdvice
// 异常以Json格式返回 等同 ExceptionHandler + ResponseBody 注解
// @RestControllerAdvice
public class HandlerException {
/**
* 自定义业务异常映射,返回JSON格式提示
*/
@ExceptionHandler(value = ServiceException.class)
@ResponseBody
public ReturnException handler01 (HttpServletRequest request,ServiceException e){
ReturnException returnException = new ReturnException() ;
returnException.setCode(600);
returnException.setMsg(e.getMessage());
returnException.setUrl(String.valueOf(request.getRequestURL()));
return returnException ;
}
/**
* 服务异常
*/
@ExceptionHandler(value = Exception.class)
public ModelAndView handler02 (HttpServletRequest request,Exception e){
ModelAndView modelAndView = new ModelAndView() ;
modelAndView.addObject("ExeMsg", e.getMessage());
modelAndView.addObject("ReqUrl", request.getRequestURL());
modelAndView.setViewName("/exemsg");
return modelAndView ;
}
}
5、简单的测试接口
@Controller
public class ExeController {
/**
* {
* "code": 600,
* "msg": "业务异常:ID 不能为空",
* "url": "http://localhost:8003/exception01"
* }
*/
@RequestMapping("/exception01")
public String exception01 () throws ServiceException {
throw new ServiceException("业务异常:ID 不能为空");
}
@RequestMapping("/exception02")
public String exception02 () throws Exception {
throw new Exception("出现异常,全体卧倒");
}
}
四、源代码地址
GitHub·地址
https://github.com/cicadasmile/spring-boot-base
GitEE·地址
https://gitee.com/cicadasmile/spring-boot-base
SpringBoot2.0 基础案例(03):配置系统全局异常映射处理的更多相关文章
- SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.事务管理简介 1.事务基本概念 一组业务操作ABCD,要么全部 ...
- 三:SpringBoot-配置系统全局异常映射处理
三:SpringBoot-配置系统全局异常映射处理 1.异常分类 1.1 业务异常 1.2 系统异常 2.自定义异常处理 2.1 自定义业务异常类 2.2 自定义异常描述对象 2.3 统一异常处理格式 ...
- SpringBoot2.0 基础案例(16):配置Actuator组件,实现系统监控
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.Actuator简介 1.监控组件作用 在生产环境中,需要实时 ...
- SpringBoot2.0 基础案例(14):基于Yml配置方式,实现文件上传逻辑
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.文件上传 文件上传是项目开发中一个很常用的功能,常见的如头像上 ...
- SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面
一.Druid连接池 1.druid简介 Druid连接池是阿里巴巴开源的数据库连接池项目.Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能.功能强大,能防SQL注入,内置Login ...
- SpringBoot2.0 基础案例(11):配置AOP切面编程,解决日志记录业务
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.AOP切面编程 1.什么是AOP编程 在软件业,AOP为Asp ...
- SpringBoot2.0 基础案例(15):配置MongoDB数据库,实现增删改查逻辑
本文源码:GitHub·点这里 || GitEE·点这里 一.NoSQL简介 1.NoSQL 概念 NoSQL( Not Only SQL ),意即"不仅仅是SQL".对不同于传统 ...
- SpringBoot2.0 基础案例(05):多个拦截器配置和使用场景
一.拦截器简介 1.拦截器定义 拦截器,请求的接口被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 拦截器主要用来按照指定规则拒绝请求. 2.拦截器中应用 Token令牌 ...
- SpringBoot2.0基础案例(01):环境搭建和RestFul风格接口
一.SpringBoot 框架的特点 1.SpringBoot2.0 特点 1)SpringBoot继承了Spring优秀的基因,上手难度小 2)简化配置,提供各种默认配置来简化项目配置 3)内嵌式容 ...
随机推荐
- git常用开发流程
我们在使用git进行项目管理时,远程仓库的分支情况一般是: master分支作为稳定版分支,用于直接发布产品,dev分支则用于日常开发 备注: 也可以只有一个master分支,这里只介绍第一种情况. ...
- Spring Boot2.0之性能优化
1.JVM参数调优 针对运行效果 吞吐量 初始堆内存与最大堆尽量相同 减少垃圾回收次数 2.扫包优化: 启动优化 默认Tomcat容器改为Undertow Tomcat的吞吐量500 ...
- Hadoop- MapReduce分布式计算框架原理
分布式计算: 原则:移动计算而尽可能减少移动数据(减少网络开销) 分布式计算其实就是将单台机器上的计算拓展到多台机器上并行计算. MapReduce是一种编程模型.Hadoop MapReduce采用 ...
- Android Studio 字体大小和背景色的设置
豆绿色的RGB值:#C7EDCC 1.打开Android Studio——>Ctrl+Alt+s 或者 File——>Settings 2.在弹窗中选中“Colors&Fonts” ...
- Jmeter-配置原件-HTTP Cookie管理器
线程组右键 -- 添加 -- 配置原件 -- HTTP Cookie管理器 如何定位到自己的cookie?以Google Chrome浏览器为例: 1.打开浏览器,打开开发者工具 2.登录站点 3 ...
- Unity-2017.2官方实例教程Roll-a-ball(一)
声明: 本文系转载,由于Unity版本不同,文中有一些小的改动,原文地址:http://www.jianshu.com/p/6e4b0435e30e Unity-2017.2官方实例教程Roll-a- ...
- k8s 部署kube-dns
[root@k8s-master src]# kubectl create -f kube-dns.yaml service "kube-dns" createdserviceac ...
- python之系统编程 --线程
###########使用线程完成多任务################ from threading import Thread import time #1. 如果多个线程执行的都是同一个函数的话 ...
- BZOJ2329:[HNOI2011]括号修复
浅谈\(splay\):https://www.cnblogs.com/AKMer/p/9979592.html 浅谈\(fhq\)_\(treap\):https://www.cnblogs.com ...
- POJ1502(最短路入门题)
MPI Maelstrom Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7471 Accepted: 4550 Des ...