全局异常处理器

创建全局异常处理器是一种常见的做法,用于集中处理所有控制器中的异常,并返回统一的错误响应。

1. 定义异常响应对象
package com.itheima.common;

//通用的响应结果

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class R {
    private Integer code;   //1成功 0失败
    private String msg;     //错误消息
    private Object data;    //数据

    public static R ok(){
        R r = new R();
        r.setCode(1);
        return r;
    }
    public static R ok(Object data){
        R r = new R();
        r.setCode(1);
        r.setData(data);
        return r;
    }
    public static R error(String msg){
        R r = new R();
        r.setCode(0);
        r.setMsg(msg);
        return r;
    }
}
2. 创建全局异常处理器类
  1. @RestControllerAdvice (@ControllerAdvice)

    • 用于标记类为全局异常处理类,它可以捕获所有控制器中的异常。
  2. @ExceptionHandler

    • 用于指定处理特定类型的异常。
    • 可以指定多个 @ExceptionHandler 方法来处理不同类型的异常。
package com.itheima.global;

import com.itheima.common.R;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice

public class GlobalExceptionHandler {
    /**
     * 捕获并处理所有异常
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    public R exception(Exception e){
        // 返回错误信息
        return R.error(e.getCause().getMessage());
    }
}
3.自定义异常

自定义异常类内容 

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 基础枚举
 */
@Getter
@AllArgsConstructor
public enum BasicEnum implements IBasicEnum {

    SUCCEED(200, "操作成功"),
    LOGIN_FAIL(401, "用户登录失败"),
    LOGIN_LOSE_EFFICACY(401, "登录状态失效,请重新登录"),
    public final int code;
    public final String msg;

}

自定义异常类 

import com.zzyl.enums.BasicEnum;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class BaseException extends RuntimeException {

    private BasicEnum basicEnum;

    public BaseException(BasicEnum basicEnum) {
        this.basicEnum = basicEnum;
    }
}

在全局异常处理器里添加需要处理的处理类型即可(这里使用zzyl的示例)

@ExceptionHandler(BaseException.class)
    public ResponseResult<String> handlerRuntimeException(BaseException e){
        e.printStackTrace();
        return ResponseResult.error(e.getBasicEnum());
    }
    @ExceptionHandler(Exception.class)
    public ResponseResult<String> handlerUnknownException(Exception e){
        e.printStackTrace();
        return ResponseResult.error(e.getMessage());
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值