异常:自定义异常类(项目必备)

1.定义异常枚举类

public enum MyEnum {
    USER_NOT_LOGIN(100, "用户尚未登录"),
    USER_OR_PW_ERROR(101, "用户名或密码错误"),
    USER_PW_NOT_EMPTY(103, "密码不能为空"),
    FAIL(500,"未知错误"),
    PRODUCT_IS_NOT_EXIST(601,"产品不存在");
    private int status;
    private String msg;
    private String engMsg;

    MyEnum(int status, String msg) {
        this.status = status;
        this.msg = msg;

    }

    public int getStatus() {
        return status;
    }

    public String getMsg() {
        return msg;
    }
}

2.自定义异常类继承RuntimeException

public class CustomException extends RuntimeException{
    private int status;
    private String msg;

    public CustomException(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

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

3.构建全局异常捕获类

@RestControllerAdvice
public class CustomExceptionHandler {
    private static Logger log = LoggerFactory.getLogger(CustomExceptionHandler.class);
    public CustomExceptionHandler(){}
    /**
     * 自定义异常
     * @param ex
     */
    @ExceptionHandler({CustomException.class})
    public ResponseDataUtil customException(CustomException ex) {
        return new ResponseDataUtil(ex.getStatus(),ex.getMsg());
    }

    /**
     * 未知异常
     * @param ex
     * @param request
     * @return
     */
    @ExceptionHandler(Exception.class)
    public ResponseDataUtil otherException(Exception ex, HttpServletRequest request) {
        log.error("host:[{}] url:[{}] error:[{}] method:[{}] user:[{}]",
                request.getRemoteHost(), request.getRequestURI(), ex.getMessage(), request.getMethod());

        // 记录完整堆栈信息,排查用
        log.error(ex.getMessage(), ex);

        return new ResponseDataUtil(MyEnum.FAIL.getStatus(),MyEnum.FAIL.getMsg());
    }
}

4.创建通用相应对象(返回前端的实体包装类)

public  class ResponseDataUtil<T> {
    private int status;
    private String msg;
     private T data;;

    public ResponseDataUtil() {
    }

    public ResponseDataUtil(int status, String msg, T data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }
    public ResponseDataUtil(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

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

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyf_fly66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值