后端抛出异常处理后并在前端展示
记录一下最近出现的问题:有时候前端并不能仅仅依靠后台返回的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 exceptionHandler(BaseException ex){
log.error(ex.getMessage());
return Result.error(ex.getMessage());
}
}
这里@data注解是有着lombok依赖,免去繁琐的get set方法,需要的可以自行导入,当然也可以用pgt生成get set方法,亦或是其他方法
/**
* 后端统一返回结果
* @param
*/
@Data
public class Result implements Serializable {
private Integer code; //编码:1成功,0和其它数字为失败
private String msg; //错误信息
private T data; //数据
public static Result success() {
Result result = new Result();
result.code = 20000;
return result;
}
public static Result success(T object) {
Result result = new Result();
result.data = object;
result.code = 20000;
return result;
}
public static Result 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)}
就能正常展示异常信息啦!