当前位置: 首页 > news >正文

统一异常处理

问题

当系统出现异常时,除了要在控制台、日志等后台进行输出之外,还需要在前端提示用户。

为了提示给用户,错误信息需要做一些约定:

  1. 错误信息统一用json格式返回给前端
  2. 以HTTP状态码判断是否出现异常,非200即为异常

实现

使用SpringMVC提供的控制器增强类实现。

引入相关依赖包

spring-web、log4j2相关…

定义通用的异常信息

/*** 通用异常信息*/
public enum CommonError {UNKNOWN_ERROR("执行异常"),PARAMS_ERROR("非法参数异常"),OBJECT_NULL("对象为空"),QUERY_NULL("查询结果为空"),REQUEST_NULL("请求参数为空");private String errMessage;public String getErrMessage() {return errMessage;}private CommonError(String errMessage) {this.errMessage = errMessage;}
}

自定义异常类型

/*** 自定义异常类*/
public class OnlineStudyException extends RuntimeException {private String errMessage;public OnlineStudyException() {super();}public OnlineStudyException(String errMessage) {super(errMessage);this.errMessage = errMessage;}public String getErrMessage() {return errMessage;}public static void cast(String errMessage) {throw new OnlineStudyException(errMessage);}public static void cast(CommonError commonError) {throw new OnlineStudyException(commonError.getErrMessage());}
}

响应用户的统一类型

public class RestErrorResponse implements Serializable {private String errMessage;public RestErrorResponse(String errMessage) {this.errMessage = errMessage;}public String getErrMessage() {return errMessage;}public void setErrMessage(String errMessage) {this.errMessage = errMessage;}
}

全局异常处理器

@Slf4j
@RestControllerAdvice   //增强SpringMVC中的Controller 处理SpringMVC的异常信息
public class GlobalExceptionHandler {@ExceptionHandler(OnlineStudyException.class)       //表明方法的处理异常类型@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)public RestErrorResponse customException(OnlineStudyException exception) {log.error("【系统异常】{}", exception.getErrMessage());return new RestErrorResponse(exception.getErrMessage());}@ExceptionHandler(Exception.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) //用状态代码和应返回的原因标记方法或异常类。调用处理程序方法时,状态代码将应用于HTTP响应。public RestErrorResponse exception(Exception e) {log.error("【系统异常】{}", e.getMessage());return new RestErrorResponse(CommonError.UNKNOWN_ERROR.getErrMessage());}
}

测试

 public CourseBaseInfoDto createCourseBase(Long companyId,AddCourseDto dto) {.....
//合法性校验if (StringUtils.isBlank(dto.getName())) {throw new XueChengPlusException("课程名称为空");}.....
http://www.lryc.cn/news/375397.html

相关文章:

  • Nginx网络服务
  • ifconfig eth0 hw ether
  • 微信小程序录音机源代码
  • 基于c语言的简单的数据库
  • Docker 容器内运行的 Neo4j 实例 安装apoc插件
  • PostgreSQL源码分析——审计插件pgaudit
  • ijkplayer编译 android版本
  • 面向对象的进阶---static
  • React useContext
  • 【尚庭公寓SpringBoot + Vue 项目实战】用户管理(十五)
  • laravel中如何向字段标签添加工具提示
  • 高考志愿填报,选专业应该考虑哪些因素?
  • 图书管理系统代码(Java)
  • Nginx反向代理Kingbase数据库
  • 没有字幕的高清爆款视频素材去哪里找?无字幕无水印素材网站分享
  • Java23种设计模式(一)
  • Spring Boot集成websocket实现webrtc功能
  • StableSwarmUI 安装教程(详细)
  • 利用Unity XR交互工具包实现简易VR菜单控制——6.18山大软院项目实训
  • 区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测
  • 【机器学习】第6章 支持向量机(SVM)
  • hive笔记
  • kali - 配置静态网络地址 + ssh 远程连接
  • Redis常见数据类型及其常用命令详解
  • JMU 数科 数据库与数据仓库期末总结(4)实验设计题
  • Go版RuoYi
  • 八股系列 Flink
  • HTTP/2 协议学习
  • “先票后款”条款的效力认定
  • CSDN 自动上传图片并优化Markdown的图片显示