@ExceptionHandler + @ControllerAdvice +枚举实现全局异常统一处理
时间: 2023-08-09 08:06:30 浏览: 178
springmvc 异常统一处理的三种方式详解.docx
好的,您想了解关于使用 @ExceptionHandler + @ControllerAdvice +枚举实现全局异常统一处理的内容,这是一个常用的方案,可以实现全局异常的捕获和处理,让程序更加健壮和稳定。
@ExceptionHandler注解用于标记一个方法,该方法用于处理指定的异常类型。@ControllerAdvice注解用于标记一个类,该类用于处理全局异常。枚举则可以用于定义异常类型,方便异常处理时的统一管理。
在实现全局异常处理时,我们可以通过 @ExceptionHandler 注解来捕获指定的异常类型,并在方法中进行相应的处理。@ControllerAdvice注解可以让我们在一个类中定义多个 @ExceptionHandler方法,用于处理不同类型的异常。同时,我们也可以使用枚举来定义不同的异常类型,方便管理和调用。
下面是一个简单的示例,演示如何使用 @ExceptionHandler + @ControllerAdvice +枚举实现全局异常统一处理:
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = BusinessException.class)
@ResponseBody
public ResultVO handleBusinessException(BusinessException e) {
return ResultVO.error(e.getCode(), e.getMessage());
}
}
public enum ExceptionEnum {
PARAMETER_ERROR(1001, "参数错误"),
DATA_NOT_FOUND(1002, "数据不存在"),
SYSTEM_ERROR(5000, "系统错误");
private final int code;
private final String message;
ExceptionEnum(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
public class BusinessException extends RuntimeException {
private final int code;
public BusinessException(int code, String message) {
super(message);
this.code = code;
}
public BusinessException(ExceptionEnum exceptionEnum) {
super(exceptionEnum.getMessage());
this.code = exceptionEnum.getCode();
}
public int getCode() {
return code;
}
}
```
在上面的示例中,GlobalExceptionHandler类标记了@ControllerAdvice注解,用于全局异常处理。其中,handleBusinessException方法用于处理BusinessException异常,返回一个ResultVO对象,其中包含错误码和错误信息。
BusinessException则是一个自定义的异常类,它包含一个code属性和一个message属性,用于表示异常的错误码和错误信息。同时,它还提供了一个构造方法,可以根据ExceptionEnum来构造一个BusinessException对象。
ExceptionEnum则是一个枚举类,包含了不同的异常类型,每个异常类型都有一个对应的错误码和错误信息。
在实际开发中,我们可以根据实际需求来定义不同的异常类型和错误码,以便更好地管理和调用。
阅读全文