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 发送对应的请求进行测试
到此这篇关于SpringMVC项目异常处理机制详解的文章就介绍到这了,更多相关SpringMVC异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
List转变为逗号分隔的String(Java7和Java8分别实现)
这篇文章主要介绍了Java7和Java8分别实现List转变为逗号分隔的String,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-06-06使用Spring Boot+MyBatis框架做查询操作的示例代码
这篇文章主要介绍了使用Spring Boot+MyBatis框架做查询操作的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-10-10
最新评论