后端抛出异常处理后并在前端展示

记录一下最近出现的问题:有时候前端并不能仅仅依靠后台返回的code去进行报错提示,或者通过.catch去捕获异常并弹出,导致页面非常不友好,那有没有办法让前端报错提示由后端控制呢,诶,当然有,上代码!

1.自定义异常类,捕获全局异常,统一响应结果

/**
 * 业务异常
 */
public class BaseException extends RuntimeException {

    public BaseException() {
    }

    public BaseException(String msg) {
        super(msg);
    }

}
/**
 * 全局异常处理
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {

   

    /**
     * 异常处理方法
     * @return
     */
    @ExceptionHandler(BaseException.class)
    public Result<String> exceptionHandler(BaseException ex){
        log.error(ex.getMessage());
        return Result.error(ex.getMessage());
    }

}

这里@data注解是有着lombok依赖,免去繁琐的get set方法,需要的可以自行导入,当然也可以用pgt生成get set方法,亦或是其他方法

/**
 * 后端统一返回结果
 * @param <T>
 */
@Data
public class Result<T> implements Serializable {

    private Integer code; //编码:1成功,0和其它数字为失败
    private String msg; //错误信息
    private T data; //数据

    public static <T> Result<T> success() {
        Result<T> result = new Result<T>();
        result.code = 20000;
        return result;
    }

    public static <T> Result<T> success(T object) {
        Result<T> result = new Result<T>();
        result.data = object;
        result.code = 20000;
        return result;
    }

    public static <T> Result<T> error(String msg) {
        Result result = new Result();
        result.msg = msg;
        result.code = 0;
        return result;
    }

}

写好以上两个类,想抛出什么消息直接 throw new BaseException(“博主帅脸加载异常!”)就可以啦!

但是!" log.error(ex.getMessage()) "=>此时抛出异常信息仅在后台展示

也向前端 return Result.error(ex.getMessage());

2.前端展示

那么,后端返回了,前端就可以拿到这个数据,在请求回调函数中直接写

if(code===0){ this.$message.error(res.msg)}

就能正常展示异常信息啦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值