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 发送对应的请求进行测试

到此这篇关于SpringMVC项目异常处理机制详解的文章就介绍到这了,更多相关SpringMVC异常处理内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

SpringMVC项目异常处理机制详解的更多相关文章

  1. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  2. JSP中springmvc配置validator的注意事项

    这篇文章主要介绍了JSP中springmvc配置validator的注意事项的相关资料,并说明springmvc中spring-servlet.xml、applicationContext.xml的区别需要的朋友可以参考下

  3. SpringMVC拦截器和异常处理器使用示例超详细讲解

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。本文将详细讲讲SpringMVC中拦截器参数及拦截器链配置,感兴趣的可以尝试一下

  4. Python图像运算之图像阈值化处理详解

    这篇文章将详细讲解图像阈值化处理,涉及阈值化处理、固定阈值化处理和自适应阈值化处理,这是图像边缘检测或图像增强等处理的基础,感兴趣的可以了解一下

  5. 一篇文章带你了解vue.js的事件循环机制

    这篇文章主要为大家详细介绍了vue.js事件循环机制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  6. Python超详细讲解内存管理机制

    本章主要介绍Pyhon的内存管理,以Pyhon的计数机制作为引入,介绍Pyhon的内存管理方式,感兴趣的朋友来看看吧

  7. SpringMVC数据页响应ModelAndView实现页面跳转

    本文主要介绍了SpringMVC数据页响应ModelAndView实现页面跳转,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. SpringMVC静态资源配置过程详解

    在javaweb项目中配置了DispatcherServlet的情况下,如果不进行额外配置的话,几乎所有的请求都会走这个servlet来处理,默认静态资源按路径是访问不到的会报404错误,下面就来讲一讲如何配置才能访问到静态资源吧

  9. 浅谈JS日期(Date)处理函数

    这篇文章主要整理了一下JS日期(Date)处理函数,算是对自己近期学习javascript的一个小小的总结,这里分享给大家

  10. SpringBoot详细介绍SPI机制示例

    这篇文章主要介绍了深入解析Spring Boot的SPI机制详情,SPI是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要用于框架中开发,更多相关介绍,感兴趣的小伙伴可以参考一下下面文章内容

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部