文章目录
- 一、什么是自定义异常及全局异常处理?
- 二、使用步骤
- 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实现自定义异常及全局异常处理的使用,通过自定义异常及全局异常处理我们可以方便的处理异常。