ssm----项目异常的处理方法

文章介绍了在Java项目中对不同类型的异常进行分类和处理的方法,包括业务异常、系统异常和其他未预期异常。通过定义错误代码类、结果集类以及自定义的异常处理类,实现了针对不同异常的定制化响应,同时在异常处理类中记录日志并通知相关人员。
摘要由CSDN通过智能技术生成

项目异常分类:

  1. 业务异常(BusinessException)

    • 规范的用户行为产生的异常
    • 不规范的用户行为操作产生的异常
    • 方案:发送对应信息传递给用户,提醒规范操作
  2. 系统异常(SystemException)

    • 项目运行过程中可预计且无法避免的异常
    • 方案:发送固定消息传递给用户,安抚用户、发送特定消息给运维人员,提醒运维、记录日志
  3. 其他异常(Exception)

    • 编程人员未预期到的异常
    • 方案:发送固定消息传递给用户,安抚用户、发送特定消息给编程人员,提醒维护(纳入预期范围内)、记录日志

  1. 首先定义一个Code类,用来定义错误代码
public class Code {
   	public static final Integer SYSTEM_ERR=50001;
    public static final Integer SYSTEM_TIMEOUT_ERR=50002;
    public static final Integer BUSINESS_ERR=60001;
    public static final Integer SYSTEM_UNKNOW_ERR=5999;
}

2.定义一个json的返回结果集类

public class Result {
    private Object data;
    private Integer code;
    private String msg;


    public Result(Integer code,Object data,  String msg) {
        this.data = data;
        this.code = code;
        this.msg = msg;
    }

    public Result(Integer code,Object data) {
        this.data = data;
        this.code = code;
    }

    public Result() {

    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

3.定义业务异常处理类BussinessException,此处模拟的是超时异常,故继承了RuntimeException

public class BussinessException  extends RuntimeException{

    private Integer code;


    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public BussinessException(Integer code, String message) {
        super(message);
        this.code = code;
    }

    public BussinessException(Integer code,String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }
}
  1. 定义系统异常处理类SystemException,此处模拟的是超时异常,故继承了RuntimeException
public class SystemException extends RuntimeException {

    private Integer code;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public SystemException(Integer code, String message) {
        super(message);
        this.code = code;
    }

    public SystemException(Integer code,String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }

}

  1. 在getById(Integer id)方法中模拟异常
@Override
    public Book getById(Integer id) {

        //模拟异常
        if (id==1){
            throw new BussinessException(Code.BUSINESS_ERR,"请不要使用你的技术挑战我的耐心!");
        }

        //将可能出现的异常进行包装,转换成自定义异常
        try {
            int i=1/0;
        }catch (Exception e){
            throw new SystemException(Code.SYSTEM_UNKNOW_ERR,"服务器访问超时,请重试!",e);
        }



        return bookDao.getById(id);
    }
  1. 编写异常处理类ProjectExeptionAdvice,注意在SpringMvcConfig类中定义的扫描范围要包含ProjectExeptionAdvice类
@RestControllerAdvice//声明这是处理Rest风格开发的controller
public class ProjectExeptionAdvice {

    //系统异常
    @ExceptionHandler(SystemException.class)
    public Result doSystemException(SystemException se){
       //记录日志

        //发送消息给运维

        //发送邮件给开发人员

        return new Result(se.getCode(),null,se.getMessage());
    }

    //业务异常
    @ExceptionHandler(BussinessException.class)
    public Result doBussinessException(BussinessException be){
        return new Result(be.getCode(),null,be.getMessage());
    }

    //其他异常
    @ExceptionHandler(Exception.class)
    public Result doException(Exception e){

        //记录日志

        //发送消息给运维

        //发送邮件给开发人员,e对象发给开发人员
        return new Result(Code.SYSTEM_UNKNOW_ERR,null,"系统异常,请稍后再试!");
    }
}
  1. 测试模拟的异常处理
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值