自定义异常的灵活使用

本文介绍了一种自定义异常处理的方法,包括定义接口、实现类、枚举异常、结果集封装及返回异常等步骤,帮助程序员优雅地处理程序中的错误。

这段时间躺平了很久,没怎么学习,今天突然看到群里面一个大一的学生已经学完了springcloud,不禁要我想到最开始卷的时候,顿时兴致突发,打算写一篇文章(其实是之前就打算写的)
在这里插入图片描述
我们知道,当程序发生异常的时候,出现的一堆报错会十分的丑陋
我们作为新时代的帅气程序员,怎么能容忍这种情况出现呢?
所以在这里我们需要引入自定义异常

一、定义接口

一般返回的有两个数据,一个是错误代码,一个是错误信息,所以在这里接口需要有两个方法

package com.znb.asiacomshow.exception;

/**
 * @Author znb
 */
public interface CustomExceptionInterface {

    String getInfo();

    int getCode();
}

二、接口实现类

实现接口

package com.znb.asiacomshow.exception;




/**
 * @Author znb
 * @Description 自定义异常
 */
public class CustomException extends RuntimeException {
    private static final long serialVersionUID = 1L;

    private Integer code;

    private String message;

    public CustomException(CustomExceptionInterface exception) {
        System.out.println(exception);
        this.message = exception.getInfo();
        this.code = exception.getCode();
    }



    @Override
    public String getMessage() {
        return message;
    }

    public Integer getCode() {
        return code;
    }
}

三、枚举自定义异常

用枚举继承自定义的接口异常,那么所有在这个接口下的枚举都是这个类型的异常

package com.znb.asiacomshow.exception.enums;


import com.znb.asiacomshow.exception.CustomExceptionInterface;

/**
 * @Author WangYang
 * @Date 2022/8/18 10:39 上午
 * @Description 4xx 系统异常
 */
public enum SystemExceptionEnum implements CustomExceptionInterface {

    /**
     * 4xx 系统异常
     */
    USER_OVERDUE("USER_OVERDUE",510),
    ALREADY_EXISTS("已经存在了",511),



    ;
    /**
     * 信息
     */
    private String info;
    /**
     * 错误码
     */
    private Integer code;

    SystemExceptionEnum(String info, Integer code) {
        this.code = code;
        this.info = info;
    }

    @Override
    public String getInfo() {
        return this.info;
    }

    @Override
    public int getCode() {
        return this.code;
    }
}

四、结果集封装

当满足异常的条件满足时,返回结果集,结果集中包含了代码和信息

package com.znb.asiacomshow.common.lang;

import com.znb.asiacomshow.exception.CustomException;
import com.znb.asiacomshow.exception.CustomExceptionInterface;
import lombok.Data;

import java.io.Serializable;

@Data
public class Result implements Serializable {

    private int code; // 200是正常,非200表示异常
    private String msg;
    private Object data;

    public static Result succ(Object data) {
        return succ(200, "操作成功", data);
    }

    public static Result succ(int code, String msg, Object data) {
        Result r = new Result();
        r.setCode(code);
        r.setMsg(msg);
        r.setData(data);
        return r;
    }

    public static Result fail(String msg) {
        return fail(400, msg, null);
    }


    public static Result warning(String msg) {
        return fail(200, msg, null);
    }

    public static Result fail(String msg, Object data) {
        return fail(400, msg, data);
    }

    public static Result fail(int code, String msg, Object data) {
        Result r = new Result();
        r.setCode(code);
        r.setMsg(msg);
        r.setData(data);
        return r;
    }

    public static Result fail(CustomException c){
        Result r=new Result();
        r.setCode(c.getCode());
        r.setMsg(c.getMessage());
        return r;
    }

}

五、返回异常

当满足条件,直接返回对应的异常即可

 return Result.fail(new CustomException(SystemExceptionEnum.ALREADY_EXISTS));

看完有用麻烦给个三连吧
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值