异常处理器
Spring提供了一种解决SSM整合中出现异常的方法,当程序出现异常时,只需要在表现层,定义一个异常处理类,来接收程序中出现的异常。步骤:
一,在controller下定义一个异常处理类ProjectExceptionAdvice 该类使用@RestControllerAdvice注解,@RestControllerAdvice用于标识当前类为REST风格对应的异常处理器
二,类中定义方法来接收异常,使用@ExceptionHandler注解设置当前处理器类对应的异常类型。例如:
@RestControllerAdvice
public class ProjectExceptionAdvice {
//@ExceptionHandler用于设置当前处理器类对应的异常类型
@ExceptionHandler(Exception.class)//接收所有异常类型
public void doSystemException(Exception ex){
}
这就是一个简单的异常处理类
项目异常处理
项目异常分类
- 业务异常(BusinessException)
- 规范的用户产生的异常
- 不规范的用户产生的异常
- 系统异常(SystemException)
- 项目运行过程中可预计且无法避免的异常
- 其他异常(Exception)
- 编程人员未预期的异常
项目异常处理方案
- 业务异常(BusinessException)
- 发送对应消息传递给用户,提醒规范操作
- 系统异常(SystemException)
- 发送固定的消息给用户,安抚用户
- 发送特定消息给运维人员,提醒维护
- 记录日志
- 其他异常(Exception)
- 发送固定消息传递给用户,安抚用户
- 发送特定消息给编程人员,提醒维护
- 记录日志
解决方案
将自定义异常与异常处理器结合使用,预先自定义好 业务异常(BusinessException),系统异常(SystemException),其他异常(Exception)这三种异常,在代码可能会出现以上这三种异常时,抛出或者捕获以上类型的异常,在异常 处理器类ProjectExceptionAdvice中分别作出以上三种异常的处理即可,例如
@RestControllerAdvice
public class ProjectExceptionAdvice {
//@ExceptionHandler用于设置当前处理器类对应的异常类型
@ExceptionHandler(SystemException.class)
public Result doSystemException(SystemException ex){
//记录日志
//发送消息给运维
//发送邮件给开发人员,ex对象发送给开发人员
return new Result(ex.getCode(),null,ex.getMessage());
}
@ExceptionHandler(BusinessException.class)
public Result doBusinessException(BusinessException ex){
return new Result(ex.getCode(),null,ex.getMessage());
}
//除了自定义的异常处理器,保留对Exception类型的异常处理,用于处理非预期的异常
@ExceptionHandler(Exception.class)
public Result doOtherException(Exception ex){
//记录日志
//发送消息给运维
//发送邮件给开发人员,ex对象发送给开发人员
return new Result(Code.SYSTEM_UNKNOW_ERR,null,"系统繁忙,请稍后再试!");
}
}