springboot创建自定义异常类,使用全局异常处理类捕获异常信息

1.目的

处理异常信息,相较于在方法内抛出抛出异常,使用全局异常处理类捕获异常信息更方便管理。

2.异常类

2.1. 自定义异常类 XueChengPlusException.java

package com.xuecheng.exception;

import lombok.Data;

/**
 * 自定义异常类
 */
public class XueChengPlusException extends RuntimeException{

    private String errMessage;

    public XueChengPlusException() {
        super();
    }

    public XueChengPlusException(String message) {
        super(message);
        this.errMessage = message;
    }

    public String getErrMessage() {
        return errMessage;
    }

    public void setErrMessage(String errMessage) {
        this.errMessage = errMessage;
    }

    public static void cast(String message){
        throw new XueChengPlusException(message);
    }

    public static void cast(CommonError error){
        throw new XueChengPlusException(error.getErrMessage());
    }
}


2.2.通用错误信息类 CommonError.java

package com.xuecheng.exception;


public enum CommonError {

   UNKOWN_ERROR("执行过程异常,请重试。"),
   PARAMS_ERROR("非法参数"),
   OBJECT_NULL("对象为空"),
   QUERY_NULL("查询结果为空"),
   REQUEST_NULL("请求参数为空");

   private String errMessage;

   public String getErrMessage() {
      return errMessage;
   }

   private CommonError( String errMessage) {
      this.errMessage = errMessage;
   }

}

2.3.和前端约定返回的异常信息类 RestErrorResponse.java

package com.xuecheng.exception;

import java.io.Serializable;

/**
 * 和前端约定返回的异常信息
 */
public class RestErrorResponse implements Serializable {

    private String errMessage;

    public RestErrorResponse() {
    }

    public String getErrMessage() {
        return errMessage;
    }

    public void setErrMessage(String errMessage) {
        this.errMessage = errMessage;
    }

    public RestErrorResponse(String errMessage) {
        this.errMessage = errMessage;
    }
}


2.4.全局异常信息处理类 GlobalExceptionHandle.java

package com.xuecheng.exception;


import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

/**
 * 全局异常信息处理类
 */
@Slf4j
//@ControllerAdvice
@RestControllerAdvice   //相当于@ControllerAdvice和 @RequestBody
public class GlobalExceptionHandle {

    //对项目的自定义异常类型进行处理
//    @ResponseBody
    @ExceptionHandler(XueChengPlusException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public RestErrorResponse customException(XueChengPlusException e){
        //记录异常日志
        log.error("系统异常:{}",e.getErrMessage(),e);
        //解析出异常信息
        String message = e.getErrMessage();
        RestErrorResponse restErrorResponse = new RestErrorResponse(message);
        return restErrorResponse;
    }

//    @ResponseBody
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public RestErrorResponse Exception(Exception e){
        //记录异常日志
        log.error("系统异常:{}",e.getMessage(),e);
        //解析出异常信息
        RestErrorResponse restErrorResponse = new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());
        return restErrorResponse;
    }


}


3.业务类抛出异常

当走到 XueChengPlusException.cast("出错了");时,会进入全局自定义异常类customException方法
当走到int i = 5/0;时,会进入全局自定义异常类Exception方法
    public CourseBaseInfoDto createCourseBase(Long companyId,AddCourseDto dto) {
        if (true){
        //  int i = 5/0;
            XueChengPlusException.cast("出错了");
        }
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值