全局异常处理
全局异常处理
自定义异常
创建自定义异常类,并继承Exception或者RunTimeException类,并重写相关方法。
/**
* @author 居無何
* date: 2022/2/28 20:28
* Description: 信息更新时出现的未知异常
* 注:ServiceException也是自定义异常类也是继承自RunTimeException。
*/
public class UpdateException extends ServiceException{
public UpdateException() {
super();
}
public UpdateException(String message) {
super(message);
}
public UpdateException(String message, Throwable cause) {
super(message, cause);
}
public UpdateException(Throwable cause) {
super(cause);
}
protected UpdateException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
捕获全局异常
- 创建处理全局异常的类
- 通过注解**@ControllerAdvice和@ExceptionHandler **标记该类为全局处理异常类和捕获各个不同类型的异常。
/**
* @author 居無何
* date: 2022/2/23 17:19
* Description: 统一捕获controller层的异常
*/
@ControllerAdvice
public class BaseController {
/**
* @ControllerAdvice-标记该类为处理全局异常的类。
* @ExceptionHandler(ServiceException.class)-捕获指定的异常。
*/
@ResponseBody
@ExceptionHandler(ServiceException.class)
public JsonResult<Void> ControllerException (Throwable e){
JsonResult jsonDesign = new JsonResult();
if (e instanceof UserNameOccupyException){
jsonDesign.setStatus(3050);
jsonDesign.setDescription("出现未知错误,数据更新失败!");
}
return jsonDesign;
}
}
手动异常抛出
根据具体的项目实际情况抛出异常,这里就采用主方法演示。
public class Test {
public static void main(String[] args) {
//手动抛出异常
throw new UpdateException("未知错误,数据更新失败!");
}
}
枚举异常处理
该方式与上一种方法相比较,使用枚举异常处理的方式可以减少类的创建。
创建枚举类
public enum ExceptionEnum {
UpdateException(3050,"遇到未知错误,数据更新失败!");
//响应代码
private int code;
//响应的消息
private String message;
ExceptionEnum(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
创建自定义异常
创建自定义异常,继承RunTimeException。
public class GlobalException extends RuntimeException{
private ExceptionEnum exceptionEnum;
public GlobalException(ExceptionEnum exceptionEnum) {
this.exceptionEnum = exceptionEnum;
}
public ExceptionEnum getExceptionEnum() {
return exceptionEnum;
}
}
捕获全局异常
@ControllerAdvice
public class GlobalExceptionController {
@ExceptionHandler(GlobalException.class)
public JsonResult<Void> ControllerException(GlobalException e){
JsonResult jsonDesign = new JsonResult();
//code
jsonDesign.setStatus(e.getExceptionEnum().getCode());
//详细消息
jsonDesign.setDescription(e.getExceptionEnum().getMessage());
return jsonDesign;
}
}
手动抛出异常
throw new GlobalException(ExceptionEnum.UpdateException);