在项目开发过程中,不管是对底层数据库的操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。如果对每个过程都单独作异常处理,那系统的代码耦合度会变得很高,此外,开发工作量也会加大而且不好统一,这也增加了代码的维护成本。
针对这种实际情况,我们需要将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能单一,也实现了异常信息的统一处理和维护。同时,我们也不希望直接把异常抛给用户,应该对异常进行处理,对错误信息进行封装,然后返回一个友好的信息给用户。这节主要总结一下项目中如何使用 Spring Boot 如何拦截并处理全局的异常。
1、异常处理问题分析
1.1 异常问题
-
针对代码中的异常,常规有两种处理方式,一种throws直接抛出,另一种try..catch捕获。
-
在java项目中,有可能存在人为逻辑的异常,也可能为取得异常的详情,或是保证程序在异常时继续向下执行,会采用第二种处理方式。
-
但是,代码中每一处异常都来捕获,会使代码什么冗余且不利于维护。
1.2 解决思路
-
定义一个全局异常处理类,返回统一规范的异常信息;
-
处理逻辑是,先判定是否会出现异常,再执行后续具体的业务。
1.3 应用示例
本文主要为了实现全局异常处理的逻辑,只举简单业务
某公司部门需增加员工,处理流程:1先根据员工编号查询员工对象,2判断员工对象是否有信息,即是否不为空,3若有信息,则说明已存在,无需再添加,若不是,则直接添加。
举个栗子:
public class MyService {
// 注入dao层
@Autowired
EmployeeecMapper employeeecMapper;
/**
* 添加员工信息
* @param employee 员工对象
* @return 影响的行数
*/
public int add(Employee employee) {
// 根据id查询员工对象
Employeeec emp = employeeecMapper.selectByPrimaryKey(employee.getId());
// 判断是否已有该员工
if (emp !