目录

一、异常处理器

二、项目异常处理方案

项目异常分类

项目异常处理方案

项目异常处理


一、异常处理器

程序开发过程中不可避免的会遇到异常现象

出现异常现象的常见位置与常见诱因如下:

■ 框架内部抛出的异常:因使用不合规导致

■ 数据层抛出的异常:因外部服务器故障导致(例如:服务器访问超时)

■ 业务层抛出的异常:因业务逻辑书写错误导致(例如:遍历业务书写操作,导致索引异常等)

■ 表现层抛出的异常:因数据收集、校验等规则导致(例如:不匹配的数据类型间导致异常)

■ 工具类抛出的异常:因工具类书写不严谨不够健壮导致(例如:必要释放的连接长期未释放等)

1、各个层级出现异常,异常处理代码书写在哪一层?

所有的异常均抛出到表现层进行处理

2、表现层处理异常,每个方法单独书写,代码书写量巨大且意义不强,如何解决?

AOP思想

异常处理器

集中的、统一的处理项目中出现的异常

@RestControllerAdvice
public class ProjectExceptionAdvice{@ExceptionHandler(Exception.class)public Result doException(Exception ex){return new Result(666,null);}
}

名称:@RestControllerAdvice

类型:类注解

位置:Rest风格开发的控制器增强类定义上方

作用:为Rest风格开发的控制器类做增强

范例:

@RestControllerAdvice
public class ProjectExceptionAdvice{
}

说明:此注解自带@ResponseBody注解与@Component注解,具备对应的功能

名称:@ExceptionHandler

类型:方法注解

位置:专用于异常处理的控制器方法上方

作用:设置指定异常的处理方案,功能等同于控制器方法,出现异常后终止原始控制器执行,并转入当前方法执行

范例:

@RestControllerAdvice
public class ProjectExceptionAdvice{@ExceptionHandler(Exception.class)public Result doException(Exception ex){return new Result(666,null);}
}

说明:此类方法可以根据处理的异常不同,制作多个方法分别处理对应的异常

异常处理器处理效果比对:

无异常时:

有异常时:

二、项目异常处理方案

项目异常分类

业务异常(BusinessException)

规范的用户行为产生的异常

不规范的用户行为产生的异常

系统异常(SystemException)

项目运行过程中可预计且无法避免的异常

其他异常(Exception)

编程人员未预期到的异常

项目异常处理方案

业务异常(BusinessException)

发送对应消息传递给用户,提醒规范操作

系统异常(SystemException)

发送固定消息传递给用户,安抚用户

发送特定消息给运维人员,提醒维护

记录日志

其他异常(Exception)

发送固定消息传递给用户,安抚用户

发送特定消息给编程人员,提醒维护(纳入预期范围内)

记录日志

项目异常处理

1、自定义项目异常系统级异常

//自定义异常处理器,用于封装异常信息,对异常进行分类
public class SystemException extends RuntimeException{private Integer code;public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public SystemException(Integer code, String message) {super(message);this.code = code;}public SystemException(Integer code, String message, Throwable cause) {super(message, cause);this.code = code;}
}

2、自定义项目业务级异常

//自定义异常处理器,用于封装异常信息,对异常进行分类
public class BusinessException extends RuntimeException{private Integer code;public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public BusinessException(Integer code, String message) {super(message);this.code = code;}public BusinessException(Integer code, String message, Throwable cause) {super(message, cause);this.code = code;}
}

3、自定义异常编码(持续补充)

public class Code {public static final Integer SYSTEM_UNKNOW_ERROR = 50001;public static final Integer SYSTEM_TIMEOUT_ERROR = 50002;public static final Integer PROJECT_VALIDATE_ERROR = 60001;public static final Integer PROJECT_BUSINESS_ERROR = 60002;
}

4、触发自定义异常

@Service
public class BookServiceImpl implements BookService {@Autowiredprivate BookDao bookDao;public Book getById(Integer id) {//模拟业务异常,包装成自定义异常if(id < 0){throw new BusinessException(Code.PROJECT_BUSINESS_ERROR,"请勿进行非法操作!");}return bookDao.getById(id);}
}

5、拦截并处理异常

//@RestControllerAdvice用于标识当前类为REST风格对应的异常处理器
@RestControllerAdvice
public class ProjectExceptionAdvice {//@ExceptionHandler用于设置当前处理器类对应的异常类型@ExceptionHandler(SystemException.class)public Result doSystemException(SystemException ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(ex.getCode(),null,ex.getMessage());}@ExceptionHandler(BusinessException.class)public Result doBusinessException(BusinessException ex){return new Result(ex.getCode(),null,ex.getMessage());}//除了自定义的异常处理器,保留对Exception类型的异常处理,用于处理非预期的异常@ExceptionHandler(Exception.class)public Result doOtherException(Exception ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(Code.SYSTEM_UNKNOW_ERROR,null,"系统繁忙,请联系管理员!");}
}

6、异常处理器效果对比

SSM整合-异常处理器及项目异常处理方案相关推荐

  1. SSM整合 登录注册小项目

    整合SSM制作登录注册功能 首先 引入pom.xml 配置  对应版本确定无冲突  注意反射插件的引入路径 <?xml version="1.0" encoding=&quo ...

  2. 第一个SSM整合的Maven入门级项目(超详细步骤)

    环境 jdk:1.8 Tomcat:7.0 本地mysql:8.0 Eclipse:Eclipse Jee Photon Spring:4.3.8 AOP:1.8.0 mybatis:3.3.0 My ...

  3. springMVC02-SSM整合(Result统一响应数据格式、异常页面修改、SSM整合vue-elementUI小案例、SpringMVC的拦截器Interceptor)

    文章目录 今日内容 一.SSM整合[重点] 1 SSM整合配置 问题导入 1.1 SSM整合流程 1.2 SSM整合配置 1.2.1 创建工程,添加依赖和插件 1.2.2 Spring整合Mybati ...

  4. SSM整合之纯注解方式,注解实现事务,异常,与拦截器

    SSM整合之纯注解方式Spring,SpringMVC,Mybatis 使用纯注解的方式,整合ssm, sql语句与数据表 在上一篇SSM整合之XML方式中有, 创建maven项目(代码中注释为详细解 ...

  5. SSM整合之XML方式,与配置事务,拦截器,异常处理,PageHelper分页插件整合

    SSM整合之XML方式 将主流的三大框架整合一起使用 spring:将需要的bean交给IOC管理 SpringMVC:解决表现层 MyBatis:解决持久层 创建maven项目(配置文件与代码中注释 ...

  6. ssm如何支持热部署_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合

    在Spring Boot项目中,正常来说是不存在XML配置,这是因为Spring Boot不推荐使用XML,注意,排不支持,Spring Boot推荐开发者使用Java配置来搭建框架, Spring ...

  7. springboot做系统所需的软硬件环境_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合...

    在Spring Boot项目中,正常来说是不存在XML配置,这是因为Spring Boot不推荐使用XML,注意,排不支持,Spring Boot推荐开发者使用Java配置来搭建框架, Spring ...

  8. 快速入门SSM整合配置建立第一个SSM项目模板

    场景 对于新手来说,学过Spring.SpringMVC.Mybatis,但是将其整合起来搭建项目就 比较困难. 环境 Eclipse+Mysql5.7+jdk8,没有搭建Maven项目,入门已经将需 ...

  9. C++ Qt全局异常处理器_异常处理

    异常处理是编程中十分重要但也最容易被人忽视的语言特性,它为开发者提供了处理程序运行时错误的机制,对于程序设计来说正确的异常处理能够防止泄露程序自身细节给用户,给开发者提供完整的错误回溯堆栈,同时也能提 ...

最新文章

  1. linux shell 删除两个文件相同部分
  2. from __future__ import absolute_import用法心得小结
  3. axis使用wsdl生成客户端
  4. Failed resolution of: Landroid/support/v7/internal/widget/TintManager;异常解决方法
  5. php协程实现mysql异步_swoole与php协程实现异步非阻塞IO开发
  6. boost::multiprecision模块实现导入/导出 cpp_int 的位 到 8 位无符号值的向量相关的测试程序
  7. 【C++】 C++标准模板库(八) MultiMaps
  8. 牛客假日团队赛5 L Catch That Cow HDU 2717 (BFS)
  9. ASP.NET Core + Angular 2 Template for Visual Studio
  10. 菜鸟的MySQL学习笔记(一)
  11. 如果一年只能两次旅游,你会选择什么季节去什么地方?
  12. MAYA中average normal
  13. halcon 深度学习标注_深度学习in Halcon流程
  14. php 伪静态 获取当前页面路径_php url伪静态过程详解
  15. 运动控制第一篇之直流电动机建模
  16. python 输入整数数组_Python 2中的整数数组输入
  17. 我的世界空岛生存服务器制作,我的世界Wishing服务器-RPG丨空岛丨生存丨[1.12.2-1.16.1]...
  18. plc云网关与串口服务器区别,plc智能网关和传统工业路由器有什么区别
  19. Android通知渠道
  20. 5G 技术特点与应用

热门文章

  1. 猫猫龙猫猫004:vim编辑器理解和命令
  2. 微机接口实验一 :8255并行接口实验
  3. 2021-05-21--0515周考
  4. 前10节的理解和总结
  5. 微星主板在有RAID的情况下在NVME的SSD上安装Win10
  6. Spring Boot缓存实战 EhCache
  7. 基于STM32F103,用蜂鸣器播放歌曲
  8. 【Excel VBA】神操作之命名单元格或区域(二)——引用命名单元格或区域
  9. Spark:图(Graph)
  10. 【Java】实现计算器