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

Memory守候 2024-07-20 15:03:01 阅读 66

记录一下最近出现的问题:有时候前端并不能仅仅依靠后台返回的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)}

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。