SpringMVC项目异常处理机制详解
作者:mzz124 时间:2023-03-12 13:13:25
1、异常分类
通常分为三类:系统异常(SystemException),业务异常(BusinessException)和其他异常(Exception)
业务异常指由于用户的不规范操作产生的异常,如不合法的参数传入
系统异常指项目运行过程中可预计但无法避免的异常,如数据库宕机
其他异常指开发者未曾预料到的异常
2、自定义项目业务异常
public class BusinessException extends RuntimeException {
private Integer code;
public BusinessException(Integer code, String message) {
super(message);
this.code = code;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
3、自定义项目系统异常
public class SystemException extends RuntimeException {
private Integer code;
public SystemException(Integer code, String message, Throwable cause) {
super(message, cause);
this.code = code;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
4、其他异常
其他异常是未预料到会发生的异常,除了上面的两种异常外的所有异常都可以当作其他异常,由于所有的异常都继承自 Exception 类,所以就把 Exception 作为其他异常
5、异常代码
提高代码可读性,便于开发,自行协商设置即可
public class Code {
public static final Integer SYSTEM_ERR = 50001;
public static final Integer SYSTEM_TIMEOUT_ERR = 50002;
public static final Integer SYSTEM_UNKNOWN_ERR = 59999;
public static final Integer BUSINESS_ERR = 60001;
}
6、异常处理器
由于系统异常和其他异常需要工作人员对系统进行调整,所以出现这两种异常时通常要记录进日志,并将相关信息发送给运维人员和开发人员,而业务异常则不需要
@RestControllerAdvice
public class ProjectExceptionAdvice {
// 拦截处理业务异常
@ExceptionHandler(BusinessException.class)
public Result doBusinessException(BusinessException ex) {
return new Result(ex.getCode(), null, ex.getMessage());
}
// 拦截处理系统异常
@ExceptionHandler(SystemException.class)
public Result doSystemException(SystemException ex) {
// 记录日志,发送消息给运维人员,发送邮件给开发人员
return new Result(ex.getCode(), null, ex.getMessage());
}
//拦截处理其他异常
@ExceptionHandler(Exception.class)
public Result doException(Exception ex) {
// 记录日志,发送消息给运维人员,发送邮件给开发人员
return new Result(Code.SYSTEM_UNKNOWN_ERR, null, "系统繁忙,请联系管理员。");
}
}
7、异常发生
以业务层为例,查找 id 小于等于 0 时认为参数非法,可以抛出业务异常。对于系统异常,使用 try catch 语句包裹可能会出现异常的语句,捕获异常并包装成自定义的异常,再将其抛出
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
@Override
public Book getById(Integer id) {
// id 小于等于零时抛出业务异常
if (id <= 0) {
throw new BusinessException(Code.BUSINESS_ERR, "参数不合法,请检查传入参数!");
}
// 将可能出现的异常进行包装,装换成自定义异常
try {
int x = 1 / 0; // 加入此行出现异常
return bookDao.getById(id); // 模拟数据库访问出错
} catch (Exception e) {
throw new SystemException(Code.SYSTEM_TIMEOUT_ERR, "数据库访问异常,请稍后重试!", e);
}
}
}
最后可以用 Postman 发送对应的请求进行测试
来源:https://blog.csdn.net/Cey_Tao/article/details/126468905
标签:SpringMVC,异常,处理,机制
0
投稿
猜你喜欢
Android控件设置宽高比的方法
2023-02-14 09:30:04
MyBatis深入解读懒加载的实现
2021-10-02 01:09:44
Java多线程常见案例分析线程池与单例模式及阻塞队列
2022-06-01 06:42:42
浅谈Java之终止继承:Final类和Fianl方法
2023-02-14 00:07:08
C# Math中常用数学运算的示例详解
2023-10-06 23:06:28
详解Android studio中正确引入so文件的方法
2022-06-17 23:21:32
java生成图片验证码实例代码
2022-01-06 04:01:37
关于C#数强转会不会抛出异常详解
2021-11-09 05:44:48
java实现将域名解析成ip示例
2021-11-20 10:33:33
Android 二维码 生成和识别二维码 附源码下载
2023-05-01 12:45:01
Mybatis的mapper.xml中if标签test判断的用法说明
2023-12-23 23:04:16
Maven聚合开发实例详解
2023-07-14 11:18:12
SpringBoot配置全局异常处理器捕获异常详解
2023-11-28 05:08:07
VisualStudio Community2019在安装的过程中无法进入安装界面的解决方法
2023-02-09 11:24:34
Spring Boot项目维护全局json数据代码实例
2023-04-17 23:24:10
Android GestureDetector手势滑动使用实例讲解
2022-01-18 01:34:12
Unity学习之FSM有限状态机
2022-09-10 06:18:33
Java多线程wait()和notify()方法详细图解
2021-09-19 20:27:32
redisson 实现分布式锁的源码解析
2022-06-05 05:38:47
Intellij IDEA 的maven项目通过Java代码实现Jetty的Http服务器(推荐)
2022-02-19 20:29:13