Exception异常处理

news2024/11/16 6:02:59

1. 两种异常处理机制

1.1 使用 throw 关键字手动抛出异常

使用throw关键字抛出异常,代码会的显得简单明了

如下图所示
在这里插入图片描述

1.2 使用 try-catch 捕获异常

使用try-catch进行捕获异常,往往会使代码变得更加笼统,层层包裹

如下图所示
在这里插入图片描述

2. 自定义异常处理

我们可以使用我们自定义的异常处理,用于解决我们所设定的异常


import lombok.Data;

/**
 * 自定义异常
 */
@Data
public class XueChengPlusException extends RuntimeException{

    private String errMessage;

    public XueChengPlusException() {
    }

    public XueChengPlusException(String message) {
        this.errMessage = message;
    }

    public static void cast(String message){
        throw new XueChengPlusException(message);
    }

    public static void cast(CommonError error){
        throw new XueChengPlusException(error.getErrMessage());
    }
}

3. 异常返回前端信息model

由于我们往往需要前后端联调的时候,寻要获取异常处理的信息,使其显示在前端页面,显示给用户

import java.io.Serializable;

/**
 * 错误响应参数包装,异常信息模型
 */

public class RestErrorResponse implements Serializable {

    private final String errMessage;

    public RestErrorResponse(String errMessage) {
        this.errMessage = errMessage;
    }

    public String getErrMessage() {
        return errMessage;
    }
}

4. 通用异常信息

从上文来看,我们自定义异常继承的是RuntimeException,但如果是出现其他类型的异常,例如Exception…,我们需要定义一个通用异常处理

/**
 * @description 通用错误信息
 */
public enum CommonError {

	UNKOWN_ERROR("执行过程异常,请重试。"),
	PARAMS_ERROR("非法参数"),
	OBJECT_NULL("对象为空"),
	QUERY_NULL("查询结果为空"),
	REQUEST_NULL("请求参数为空");

	private String errMessage;

	public String getErrMessage() {
		return errMessage;
	}

	private CommonError( String errMessage) {
		this.errMessage = errMessage;
	}

}

5. 全局异常处理

这是一个异常处理机器,用于处理各种异常,然后返回给前端一个异常信息

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 针对自定义异常进行处理
     * @param e
     * @return
     */
    @ExceptionHandler(XueChengPlusException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public RestErrorResponse customException(XueChengPlusException e){

        //记录异常
        log.error("系统异常{}",e.getErrMessage(),e);
        //解析出异常信息
        String errMessage = e.getErrMessage();
        RestErrorResponse restErrorResponse = new RestErrorResponse(errMessage);
        return restErrorResponse;
    }


    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public RestErrorResponse customException(Exception e){

        //记录异常
        log.error("系统异常{}",e.getMessage(),e);
        //解析出异常信息
        RestErrorResponse restErrorResponse = new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());
        return restErrorResponse;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1508786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据 - Spark系列《十三》- spark集群部署模式

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…

【pycharm使用ssh连接服务器】

2、pycharm使用ssh连接服务器 1、具体流程2、一些需要注意的小问题2.1 更改代码地址2.2 本地代码上传到服务器2.3 在服务器的环境中上新安装库,但是pycharm检测不到 1、具体流程 打开pycharm – File – Setting 输入服务器的IP地址,端口号、登录账号名…

qt如何配置ros环境

在Qt5.7的版本可以使用bash -i -c来启动qt,让Qt自己识别系统环境,不知道为什么Qt在之后的版本,这样使用都失效了。因为它会默认把CMAKE_PREFIX_PATH修改掉。 网上还有安装ros插件版本的qt creator,感觉失去了一些灵活性。 自己测试…

连接端口和连接端口转换OrCAD补丁

来介绍此功能之前先复习一下一些OrCAD的基础知识。 说到连通两个器件,有什么办法呢?最直接的就是用线连通。比如下面这两个器件需要连通,我们可以直接用线Place wire连接。 但是如果这两个器件由于某些原因,他们之间相隔很远&…

Milvus的相似度指标

官网:https://milvus.io/docs/metric.md版本: v2.3.x 在 Milvus 中,相似度度量用于衡量向量之间的相似度。选择良好的距离度量有助于显着提高分类和聚类性能。下表展示了这些广泛使用的相似性指标如何与各种输入数据形式和 Milvus 索引相匹配。 一、浮…

大语言模型:Large Language Models Are Human-Level Prompt Engineers概述

研究内容 如何通过prompt,在不进行微调大语言模型的前提下,增加大语言模型的表现 研究动机 prompt非常有用,但是人工设置的非常不自然;因此提出了要自动使用大语言模型自己选择prompt;取得了很好的效果。 作者主要…

java异常概述及自定义处理

前言 学到异常了,本来以为处理异常只是避免bug,结果发现还可以为了编程需要自定义异常。打好基础,daydayup! 异常 什么是异常 异常就是代表程序出现的问题 异常的体系 异常体系指的是java开发人员为了方便程序员使用所开发的异常类&#xff…

一文彻底搞懂MySQL建表规范

文章目录 1. 表设计规范2. 索引规范3. SQL语句规范4. 散表规范 1. 表设计规范 库名、表名、字段名使用小写字母,使用“_”分割,不超过12个字符。使用InnoDB存储引擎。存储精确浮点数使用DECIMAL替代FLOAT和DOUBLE。使用UNSIGNED存储非负数值&#xff0c…

Linux基础学习:常用命令

目录结构及其常用命令 处理目录的常用命令: ls :列出目录及文件名cd:切换目录pwd:显示目前的目录mkdir:创建一个新的目录rmdir:删除一个空的目录cp:复制文件或目录rm:删除文件或目录…

Redis核心数据结构之字典(一)

字典 概述 字典又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种保存键值对(key-value pair)的抽象数据结构,在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和…

Unity类银河恶魔城学习记录9-1 9-2 P89,90 Character stats - Stat script源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Stat.cs using System.Collections; using System.Collections.Generic; us…

SSM整合项目(删除家居 + 分页查询)

1.删除家居 1.需求分析 2.编写Service层 1.FurnService.java 添加方法 //删除家居public void del(Integer id);2.FurnServiceImpl.java 实现方法 Overridepublic void del(Integer id) {furnMapper.deleteByPrimaryKey(id);}3.单元测试 Testpublic void del() {furnService.…

超越 Siri 和 Alexa:探索LLM(大型语言模型)的世界

揭秘LLM:语言模型新革命,智能交互的未来趋势 近年来,虚拟助手的世界发生了重大转变。 虽然 Siri 和 Alexa 本身就是革命性的,但一种称为大型语言模型 (LLM) 的新型人工智能正在将虚拟助手的概念提升到一个全新的水平。 在这篇博文…

面试官:线程调用2次start会怎样?我支支吾吾没答上来

写在开头 在写完上一篇文章《Java面试必考题之线程的生命周期,结合源码,透彻讲解!》后,本以为这个小知识点就总结完了。 但刚刚吃晚饭时,突然想到了多年前自己面试时的亲身经历,决定再回来补充一个小知识点&#xff…

Mybatis-Plus——04,自动填充时间(新注解)

自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…

汽车软件市场迅猛扩张,Perforce Helix Core与Helix IPLM助力汽车软件开发的版本控制及IP生命周期管理

汽车软件世界正处于持续变革和转型之中。从自动驾驶汽车到电动汽车和先进的驾驶辅助系统,汽车软件的集成度和复杂性不断提升。 据美国电气与电子工程师协会的研究,如今大多数汽车都集成了超过1亿行代码,而仅仅十年前,这种水平的汽…

正则表达式 || 遇到字符串里面有() 就在括号后面换行

<template><div class"vertical-layout"><header><h1>testPage</h1><p>(1)第一行内容xxxxxxxxx&#xff08;2&#xff09;第二行内容xxxxxxx(3)第三行内容</p></header><main><el-button click"goToO…

掌握Mongodb,看完这篇文章就够了

目录 1.概念 2.操作 2.1数据库操作 2.2集合操作 2.3数据操作 3.查询 4.常用技术 5.python与MongoDB 1.概念 MongoDB是一种非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;它以灵活的文档存储格式&#xff08;BSON&#xff09;和强大的查询能…

数据集踩的坑及解决方案汇总

数据集踩的坑及解决方案汇总 数据集各种格式构建并训练自己的数据集汇总Yolo系列SSDMask R-CNN报错 NotADirectoryError: [Errno 20] Not a directory: /Users/mia/Desktop/P-Clean/mask-RCNN/PennFudanPed2/labelme_json/.DS_StoreFaster R-CNN数据的格式转换划分数据集设定内…

5天获限定访问学者Offer|新加坡南洋理工大学申请公派成功

L老师拟申报某公派访问学者项目&#xff0c;要求半个月内获得新加坡国立大学或者南洋理工大学的邀请函。我们利用广泛的资源和丰富的申请经验&#xff0c;高效运作&#xff0c;仅仅5天就获得了新加坡南洋理工大学的邀请函&#xff0c;提前完成申请人的委托。 L老师背景&#xf…