• java自定义异常


     首先跟前端商量好,用errMessage作为异常信息传输的关键字

     1. 创建一个公共异常类

    如果要获取 "非法参数" 的错误消息,可以使用 CommonError.PARAMS_ERROR.getErrMessage() 方法来获取。这种方式使得代码更具可读性和维护性。

    1. public enum CommonError {
    2. //Java 的枚举类型(Enum)用于表示一组具有固定值的常量。枚举类型提供了一种更安全、更可读且更易维护的方式来处理一组相关的常量。
    3. // 下面的常量通过CommonError( String errMessage)方法,将错误信息传递给私有成员变量private
    4. UNKOWN_ERROR("执行过程异常,请重试。"),
    5. PARAMS_ERROR("非法参数"),
    6. OBJECT_NULL("对象为空"),
    7. QUERY_NULL("查询结果为空"),
    8. REQUEST_NULL("请求参数为空");
    9. // 这一行定义了一个私有的成员变量 errMessage,用于存储枚举常量的错误消息。
    10. private String errMessage;
    11. /**返回对应的错误参数信息如:
    12. * String errorMessage = CommonError.PARAMS_ERROR.getErrMessage();
    13. * System.out.println(errorMessage); // 输出 "非法参数"
    14. * 用于获取枚举常量的错误消息。这个方法允许你通过枚举常量来获取相应的错误消息。
    15. */
    16. public String getErrMessage() {
    17. return errMessage;
    18. }
    19. // 这是枚举的构造函数,它在创建每个枚举常量时被调用,并用传递的错误消息来初始化 errMessage 成员变量。
    20. private CommonError( String errMessage) {
    21. this.errMessage = errMessage;
    22. }
    23. }

    2.创建一个返回给前端的RestErrorResponse对象

    1. /*
    2. 通常情况下,当发生错误时,你可以创建一个 RestErrorResponse 对象,
    3. 将错误消息传递给构造函数,然后将这个对象作为响应的一部分返回给客户端,以便客户端能够获取错误信息。
    4. */
    5. //它实现了 Serializable 接口,表示这个类可以序列化,通常用于对象的持久化和网络传输。
    6. public class RestErrorResponse implements Serializable {
    7. //这是一个私有成员变量 errMessage,用于存储错误消息。
    8. private String errMessage;
    9. //这是类的构造函数,它接受一个错误消息字符串作为参数,并用它来初始化 errMessage 成员变量。
    10. public RestErrorResponse(String errMessage){
    11. this.errMessage= errMessage;
    12. }
    13. //这是一个公共方法 getErrMessage(),用于获取错误消息的值。通常,这种方法被用来从对象中获取属性的值。
    14. public String getErrMessage() {
    15. return errMessage;
    16. }
    17. //用于设置错误消息的值。通常,这种方法被用来修改对象的属性值。
    18. public void setErrMessage(String errMessage) {
    19. this.errMessage = errMessage;
    20. }
    21. }

    3.自定义运行时异常

    1. public class XueChengPlusException extends RuntimeException {
    2. //这是一个私有成员变量 errMessage,用于存储异常的错误消息。
    3. private String errMessage;
    4. //这是无参构造函数,它调用父类 RuntimeException 的无参构造函数。
    5. public XueChengPlusException() {
    6. super();
    7. }
    8. /*这是有参构造函数,它接受一个错误消息字符串作为参数。它首先调用父类 RuntimeException 的构造函数,
    9. 并传递错误消息,然后将错误消息存储到 errMessage 成员变量中。
    10. */
    11. public XueChengPlusException(String errMessage) {
    12. super(errMessage);
    13. this.errMessage = errMessage;
    14. }
    15. //这是一个公共方法 getErrMessage(),用于获取异常的错误消息。
    16. public String getErrMessage() {
    17. return errMessage;
    18. }
    19. /*
    20. 这是一个静态方法 cast(),它接受一个 CommonError 枚举常量作为参数。它抛出一个 XueChengPlusException 异常,
    21. 异常的错误消息来自于传入的 CommonError 枚举常量的错误消息。
    22. */
    23. public static void cast(CommonError commonError){
    24. throw new XueChengPlusException(commonError.getErrMessage());
    25. }
    26. /*
    27. 是另一个静态方法 cast(),它接受一个字符串作为参数。
    28. 它也抛出一个 XueChengPlusException 异常,异常的错误消息来自于传入的字符串。
    29. */
    30. public static void cast(String errMessage){
    31. throw new XueChengPlusException(errMessage);
    32. }
    33. }

    4.配置全局异常处理器

    1. //这是 Lombok 提供的注解,用于自动生成日志记录器(logger)的代码。日志记录器通常用于记录应用程序的运行时信息。
    2. @Slf4j
    3. // 这是 Spring Framework 提供的注解,它标识这个类是一个全局异常处理器。全局异常处理器用于捕获应用程序中抛出的异常,并根据异常类型执行相应的处理逻辑。
    4. @ControllerAdvice
    5. public class GlobalExceptionHandler {
    6. @ResponseBody
    7. /*
    8. 这是一个异常处理方法的注解,它指定了要处理的异常类型为 XueChengPlusException。
    9. 如果应用程序抛出了这种异常,将会调用这个方法来处理。
    10. */
    11. @ExceptionHandler(XueChengPlusException.class)
    12. /*
    13. 注解用于标识异常处理方法所处理的异常类型,并且可以指定返回的 HTTP 状态码以及可选的原因(reason)。
    14. HttpStatus.INTERNAL_SERVER_ERROR是一个枚举值,表示 HTTP 响应状态码为 500 Internal Server Error(内部服务器错误)。
    15. 这个状态码通常用于表示服务器在处理请求时发生了未知的、不可预料的错误。表示会返回500状态码
    16. */
    17. @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    18. public RestErrorResponse customException(XueChengPlusException e) {
    19. log.error("【系统异常】{}",e.getErrMessage(),e);
    20. return new RestErrorResponse(e.getErrMessage());
    21. }
    22. @ResponseBody
    23. @ExceptionHandler(Exception.class)
    24. @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    25. public RestErrorResponse exception(Exception e) {
    26. log.error("【系统异常】{}",e.getMessage(),e);
    27. return new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());
    28. }
    29. @ResponseBody
    30. @ExceptionHandler(MethodArgumentNotValidException.class)
    31. @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    32. public RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e) {
    33. BindingResult bindingResult = e.getBindingResult();
    34. List msgList = new ArrayList<>();
    35. //将错误信息放在msgList
    36. bindingResult.getFieldErrors().stream().forEach(item->msgList.add(item.getDefaultMessage()));
    37. //拼接错误信息
    38. String msg = StringUtils.join(msgList, ",");
    39. log.error("【系统异常】{}",msg);
    40. return new RestErrorResponse(msg);
    41. }
    42. }

    5.异常示例

    1. //向课程信息表插入数据新增对象
    2. CourseBase courseBaseNew = new CourseBase();
    3. //将填写的课程信息赋值给新增对象,属性一致就可以拷
    4. BeanUtils.copyProperties(dto, courseBaseNew);
    5. //设置审核状态
    6. courseBaseNew.setAuditStatus("202002");
    7. //设置发布状态
    8. courseBaseNew.setStatus("203001");
    9. //机构id
    10. courseBaseNew.setCompanyId(companyId);
    11. //添加时间
    12. courseBaseNew.setCreateDate(LocalDateTime.now());
    13. //插入课程基本信息表
    14. int insert = courseBaseMapper.insert(courseBaseNew);
    15. if (insert <= 0) {
    16. throw new XueChengPlusException("新增课程基本信息失败");
    17. }

  • 相关阅读:
    strstr/strtok /strerror /字符分类(转换)函数
    Paxos算法
    2022全国职业技能大赛某市赛“网络空间安全赛项”赛题及赛题解析(超详细)
    Mysql数据库基础知识总结,结构分明,内容详细
    金仓数据库KingbaseES数据库参考手册(静态数据词典视图2.3. KingbaseES兼容Oracle视图 )
    Linux驱动基础
    Spring Boot Actuator自定义监控集成到/health接口实战
    PiL测试实战(上)| 模型生成代码的单元级PiL测试
    长安三万里,安全无边界
    Django学习笔记:第二章django的安装和创建应用
  • 原文地址:https://blog.csdn.net/weixin_60934893/article/details/133035222