SpringBoot实现自定义异常及全局异常处理,赶紧整起来!

文章目录

  • 一、什么是自定义异常及全局异常处理?
  • 二、使用步骤
    • 1.创建自定义异常BusinessException
    • 2.创建全局异常处理器GlobalExceptionHandler
    • 3.通用返回ResponseData
    • 4.使用
  • 总结


一、什么是自定义异常及全局异常处理?

在web服务中,我们的接口通常需要有统一的返回格式,而在程序开发过程中,不可避免的是需要处理各种异常,如果没有全局异常处理器,通常我们需要把异常一层层往上抛出,最后在controller层处理,这样不可避免的需要写大量异常处理的重复代码,如何避免这个问题,我们可以通过自定义异常结合全局异常处理器实现统一处理。

二、使用步骤

1.创建自定义异常BusinessException

代码如下:

package com.uhu.exception;

import lombok.Data;

/**
 * @author xxx
 * @description 自定义业务异常
 * @create 2023-11-15 09:59
 **/
@Data
public class BusinessException extends RuntimeException {
    private String message;

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

    public BusinessException(String message, Throwable cause) {
        super(message, cause);
        this.message = message;
    }
}

2.创建全局异常处理器GlobalExceptionHandler

代码如下:

package com.uhu.exception.handler;

import com.uhu.common.ResponseData;
import com.uhu.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author xxx
 * @description 全局异常处理器
 * @create 2023-11-15 10:10
 **/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public ResponseData exceptionHandler(Exception e) {
        log.error("GlobalExceptionHandler exceptionHandler error message: {}", e.getMessage(), e);
        return ResponseData.error("服务器内部错误,请联系管理员");
    }

    /**
     * 自定义异常处理
     * @param e
     * @return
     */
    @ExceptionHandler(value = BusinessException.class)
    public ResponseData businessExceptionHandler(BusinessException e) {
        log.error("GlobalExceptionHandler businessExceptionHandler error message: {}", e.getMessage(), e);
        return ResponseData.error(e.getMessage());
    }
}

3.通用返回ResponseData

代码如下:

package com.uhu.common;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * @author xxx
 * @description
 * @create 2023-10-01 16:52
 **/
@ApiModel("响应参数")
@Data
public class ResponseData<T> implements Serializable {
    @ApiModelProperty("响应码 0-success 500-error")
    private int code;
    @ApiModelProperty("响应消息")
    private String message;
    @ApiModelProperty("响应值")
    private T data;

    public ResponseData() {
        this.code = 0;
        this.message = "success";
    }

    public static ResponseData ok(Object obj) {
        ResponseData responseData = new ResponseData();
        responseData.setData(obj);
        return responseData;
    }

    public static ResponseData ok() {
        ResponseData responseData = new ResponseData();
        responseData.setMessage("success");
        return responseData;
    }

    public static ResponseData error() {
        return error(500, "error");
    }

    public static ResponseData error(String message) {
        return error(500, message);
    }

    public static ResponseData error(int code, String message) {
        ResponseData responseData = new ResponseData();
        responseData.setCode(code);
        responseData.setMessage(message);
        return responseData;
    }
}


4.使用

throw new BusinessException("xxx");

总结

以上就是今天要讲的内容,本文仅仅简单介绍了SpringBoot实现自定义异常及全局异常处理的使用,通过自定义异常及全局异常处理我们可以方便的处理异常。

你可能感兴趣的:(SpringBoot,spring,boot,java,spring)