springboot定义全局异常和返回数据的方法

首先为什么需要异常:

在我们正常访问的时候,是不需要的,只有在异常的时候需要跑对应的异常,这样的消息,前端不需要处理,直接进行显示,而如果是正常的数据或者结果返回,多数情况下是需要前端进行对应的额数据转换的。

正常返回的全局定义方法:

package com.i2f.cuckoo.backend.model;

import com.i2f.cuckoo.backend.common.Constants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResultMessage<T> {
    private String code;
    private String msg;
    private T data;
// 泛型构造方法,用于后端需要返回数据到前端,比如集合,对象,数组等
    public static <T> ResultMessage<T> success(T data) {
        return new ResultMessage<>(Constants.StatusCode.SUCCESS, "操作成功", data);
    }
// 简化的返回操作成功的方法,特点是里面的参数不需要用户定义,因为成功了,而且不要数据,只要成功的消息就可以
    public static ResultMessage success() {
        return new ResultMessage(Constants.StatusCode.SUCCESS, "操作成功", "操作成功");
    }
   /* public static ResultMessage success(String msg) {
        return new ResultMessage(Constants.StatusCode.SUCCESS, msg, "操作成功");
    }*/
// 返回操作成功的方法,特点是里面的参数需要用户定义 错误的code,和message 比如 000001   失败
    public static ResultMessage fail(String code, String msg) {
        return new ResultMessage(code, msg, null);
    }
// 简化的返回操作失败的方法,特点是里面的参数不需要用户定义是系统异常
    public static ResultMessage fail(String msg) {
        return new ResultMessage(Constants.StatusCode.SYSTEM_EXCEPTION, msg, null);
    }
}

以上部分是全局的正常的数据返回,那么异常应该怎么自定义呢?

异常通常来说都属于 runtimeException 所以我们需要继承这个异常,然后全局捕获异常结合 resultmessage 进行整合:

异常的定义:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CuckooException extends RuntimeException {
    private String code;
    private String msg;
}

异常的捕获和结合resultmessage的整合返回的结果:

这儿我们需要用到spring boot里面的 @ControllerAdvice 注解:

代码如下:

@ControllerAdvice
public class CuckooExceptionHandler {
    @ExceptionHandler(value = RuntimeException.class)
    @ResponseBody
    public ResultMessage<String> handle(Exception e) {
        if (e instanceof CuckooException) {
            return new ResultMessage<>(((CuckooException) e).getCode(), ((CuckooException) e).getMsg(), null);
        }
        if (e instanceof UnauthorizedException) {
            return new ResultMessage<>("E89008", "该管理员没有操作权限", null);
        }
        return new ResultMessage<>("E00001", "网络异常请重试", null);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

specialApe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值