SpringMVC项目异常处理机制详解
作者:mzz124 发布时间:2023-03-12 13:13:25
标签:SpringMVC,异常,处理,机制
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


猜你喜欢
- 首先下载newtonsoft.json,增加引用using newtonsoft.json.linq;把jobject的内容提取出来,job
- 升级到grails 2.3.2之后,运行时报如下的异常:Exception in thread "main"Error
- 1.类加载机制Java中的源码.java后缀文件会在运行前被编译成.class后缀文件,文件内的字节码的本质就是一个字节数组 ,它有特定的复
- 目录文件下载文件上传 * * 的配置多个 * 的执行顺序异常处理器基于配置的异常处理基于注解的异常处理总结文件下载使用ResponseEn
- 前言最近在学习Kotlin这门语言,在项目开发中,运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨
- 启动Springboot项目时候报错java: 无法访问org.springframework.boot.SpringApplication
- 一、死锁简介在多道程序设计环境下,多个进程可能竞争一定数量的资源,。一个进程申请资源,如果资源不可用,那么进程进入等待状态。如果所申请的资源
- DialogFragment的基本用法1. 创建DialogFragmentpublic class DialogA extends Dia
- Java8 HashMap键与Comparable接口最容易使 HashMap 发生哈希冲突的方法是什么呢?我们可以创建一个类,让它的哈希函
- 用途:IO工具类(将内容写到流中)使用场景IO工具类只是辅助流的读写,并不负责关闭流。原因是流可能被多次读写,读写关闭后容易造成问题。项目引
- 一、API简介Thread.sleep()是Thread类的一个静态方法,使当前线程休眠,进入阻塞状态(暂停执行),如果线程在睡眠状态被中断
- 有了Eureka服务注册发现、Hystrix断路器、Ribbon服务调用负载均衡,以及spring cloud config 集群配置中心,
- 冒泡排序冒泡排序是一种比较简单的排序算法,我们可以重复遍历要排序的序列,每次比较两个元素,如果他们顺序错误就交换位置,重复遍历到没有可以交换
- Android 中Activity 之间传递参数1.传递简单数据在A Activity中findViewById(R.id.startBAc
- indexof方法:注解:indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串,则返回-1
- 这篇文章主要介绍了Java的优先队列PriorityQueue原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学
- 现在的大部分框架都是 MVC 模式,但 MVC 三个部分怎么配合,这里做了一点总结:基本原则:业务逻辑代码应该写在 M 里面,而应用程序逻辑
- 简述:观察Byte值转为字符写入文件如果在java里用byte打印出来只有33 到 126的输出字符比较正常此外发现Byte值为13是空格,
- 本文实例讲述了C#读取文本文件到listbox组件的方法。分享给大家供大家参考。具体实现方法如下:private void AddTxtTo
- Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。