springboot 自定义异常

生名一个异常类:

比如用户登录授权异常类:

/**
 * 自定义业务异常对象
 */
public class AuthorizationException extends RuntimeException {

    /**
     * @Fields serialVersionUID : TODO
     */
    private static final long serialVersionUID = 1L;

    private int code;

    private Object data;

    /*
     * 默认异常
     */
    public AuthorizationException() {
        this(200,"请求成功");
    }

    public AuthorizationException(int code, String msg) {
        super(msg);
        this.code = code;
    }

    public AuthorizationException(int code, String msg, Object data) {
        super(msg);
        this.code = code;
        this.data = data;
    }

    public AuthorizationException(String message) {
        super(message);
        code = 420;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
    
}

声明一个全局异常处理类:RestControllerAdvice.java

/**
 * 全局异常处理类,处理系统内所有异常,并给客户端相关的响应.
 */
@ControllerAdvice
public class RestControllerAdvice {

    private static final Logger logger = LoggerFactory.getLogger(RestControllerAdvice.class);

    @ExceptionHandler(AuthorizationException.class)
    @ResponseBody
    public JsonResponse<?> handleBusinessException(AuthorizationException ex, HttpServletResponse response) {
        logger.error(ex.getMessage(),ex);
        return new JsonResponse<>(ex.getCode(),ex.getMessage(), ex.getData());
    }
    
}

JsonResponse.java
@Data
public class JsonResponse<T> {

    Integer code;

    String message;
    
    T data;
    

    public JsonResponse(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
    
    public JsonResponse(Integer code, T data) {
        this.code = code;
        this.data = data;
    }

    public JsonResponse(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }
}

在业务层抛出 刚才声明的AuthorizationException异常:


@RequestMapping("/test")
public
Boolean test(){throw new AuthorizationException(401, "未登录"); }

这样就完成啦

猜你喜欢

转载自www.cnblogs.com/wanjun-top/p/12974142.html