SpringBoot创建一个初始化项目

news2024/11/16 11:37:44

提示:这一篇文章,主要是为了之后可以快速的去搭建项目,当然这篇博客,作者也会根据以后学习到的东西,慢慢去整理

文章目录


前言

搭建一个SpringBoot项目,目的是为了快速开发项目


 项目列表

 响应枚举类

/**
 * 响应码枚举类,用于定义系统中各种操作的返回码及其对应的信息。
 */
public enum ResponseCodeEnum {
    // 请求成功
    CODE_200(200, "请求成功"),
    // 请求的资源不存在
    CODE_404(404, "请求地址不存在"),
    // 请求参数错误
    CODE_600(600, "请求参数错误"),
    // 信息已存在,通常用于数据重复的场景
    CODE_601(601, "信息已经存在"),
    // 服务器内部错误,需要管理员处理
    CODE_500(500, "服务器返回错误,请联系管理员");

    // 响应码
    private Integer code;
    // 响应信息
    private String msg;

    /**
     * 构造方法,用于初始化枚举值。
     * @param code 响应码
     * @param msg 响应信息
     */
    ResponseCodeEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 获取响应码。
     * @return 响应码
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 获取响应信息。
     * @return 响应信息
     */
    public String getMsg() {
        return msg;
    }
}

响应数据包装类

/**
 * 响应数据的通用包装类,用于封装接口调用的返回结果。
 * <p>
 * 该类提供了对响应状态、响应码、响应信息和响应数据的封装,适用于各种接口返回数据的统一格式化。
 * 通过泛型T的支持,可以灵活地携带各种类型的响应数据。
 *
 * @param <T> 响应数据的类型,使用泛型提供类型安全性和灵活性。
 */
public class ResponseVO<T> {
    /**
     * 响应的状态,用于表示接口调用的总体状态,例如"success"表示成功。
     */
    private String status;
    
    /**
     * 响应码,用于更详细地表示接口调用的结果状态,例如200表示成功。
     */
    private Integer code;
    
    /**
     * 响应信息,用于对响应状态进行描述,例如"操作成功"。
     */
    private String info;
    
    /**
     * 响应数据,接口调用的实际返回数据,其类型由泛型T指定。
     */
    private T data;

    /**
     * 获取响应的状态。
     *
     * @return 响应的状态字符串。
     */
    public String getStatus() {
        return status;
    }

    /**
     * 设置响应的状态。
     *
     * @param status 响应的状态字符串。
     */
    public void setStatus(String status) {
        this.status = status;
    }

    /**
     * 获取响应码。
     *
     * @return 响应的码值。
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 设置响应码。
     *
     * @param code 响应的码值。
     */
    public void setCode(Integer code) {
        this.code = code;
    }

    /**
     * 获取响应信息。
     *
     * @return 响应的信息字符串。
     */
    public String getInfo() {
        return info;
    }

    /**
     * 设置响应信息。
     *
     * @param info 响应的信息字符串。
     */
    public void setInfo(String info) {
        this.info = info;
    }

    /**
     * 获取响应数据。
     *
     * @return 响应的数据对象,其类型为泛型T。
     */
    public T getData() {
        return data;
    }

    /**
     * 设置响应数据。
     *
     * @param data 响应的数据对象,其类型为泛型T。
     */
    public void setData(T data) {
        this.data = data;
    }
}

 异常类

/**
 * 业务异常类,用于表示在业务逻辑执行过程中发生的异常情况。
 * 继承自RuntimeException,因为它是一种非检查(Unchecked)异常,可以不强制在方法签名中声明。
 * 这使得业务异常的使用更加灵活,能够更准确地反映业务逻辑中的错误情况。
 */
public class BusinessException extends RuntimeException {

    /**
     * 错误代码枚举,用于标准化错误代码和错误消息的映射。
     */
    private ResponseCodeEnum codeEnum;

    /**
     * 错误代码,用于标识具体的错误类型。
     */
    private Integer code;

    /**
     * 错误消息,用于描述错误的具体信息。
     */
    private String message;

    /**
     * 带有错误消息和原因的构造函数。
     * 
     * @param message 错误消息
     * @param e 异常原因
     */
    public BusinessException(String message, Throwable e) {
        super(message, e);
        this.message = message;
    }

    /**
     * 带有错误消息的构造函数。
     * 
     * @param message 错误消息
     */
    public BusinessException(String message) {
        super(message);
        this.message = message;
    }

    /**
     * 带有原因的构造函数。
     * 
     * @param e 异常原因
     */
    public BusinessException(Throwable e) {
        super(e);
    }

    /**
     * 使用错误代码枚举构造业务异常。
     * 
     * @param codeEnum 错误代码枚举,包含错误代码、错误消息等信息。
     */
    public BusinessException(ResponseCodeEnum codeEnum) {
        super(codeEnum.getMsg());
        this.codeEnum = codeEnum;
        this.code = codeEnum.getCode();
        this.message = codeEnum.getMsg();
    }

    /**
     * 带有错误代码和错误消息的构造函数。
     * 
     * @param code 错误代码
     * @param message 错误消息
     */
    public BusinessException(Integer code, String message) {
        super(message);
        this.code = code;
        this.message = message;
    }

    /**
     * 获取错误代码枚举。
     * 
     * @return 错误代码枚举
     */
    public ResponseCodeEnum getCodeEnum() {
        return codeEnum;
    }

    /**
     * 获取错误代码。
     * 
     * @return 错误代码
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 获取错误消息。
     * 
     * @return 错误消息
     */
    @Override
    public String getMessage() {
        return message;
    }

    /**
     * 重写fillInStackTrace方法,返回当前异常实例。
     * 业务异常中通常不需要堆栈跟踪信息,因此这个重写方法用于提高异常处理的性能。
     * 
     * @return 当前异常实例
     */
    /**
     * 重写fillInStackTrace 业务异常不需要堆栈信息,提高效率.
     */
    @Override
    public Throwable fillInStackTrace() {
        return this;
    }
}

返回结果类

/**
 * 基础控制器类,提供通用的响应构建方法。
 */
public class ABaseController {

    /**
     * 表示操作成功的状态码。
     */
    protected static final String STATUC_SUCCESS = "success";

    /**
     * 表示操作失败或出现错误的状态码。
     */
    protected static final String STATUC_ERROR = "error";

    /**
     * 日志记录器,用于记录控制器类的运行时日志。
     */
    protected static final Logger logger = LoggerFactory.getLogger(ABaseController.class);

    /**
     * 构建一个表示操作成功的响应。
     *
     * @param t 返回的数据对象。
     * @param <T> 数据对象的类型。
     * @return 带有成功状态的响应对象。
     */
    protected <T> ResponseVO getSuccessResponseVO(T t) {
        ResponseVO<T> responseVO = new ResponseVO<>();
        responseVO.setStatus(STATUC_SUCCESS);
        responseVO.setCode(ResponseCodeEnum.CODE_200.getCode());
        responseVO.setInfo(ResponseCodeEnum.CODE_200.getMsg());
        responseVO.setData(t);
        return responseVO;
    }

    /**
     * 构建一个表示业务错误的响应。
     *
     * @param e 业务异常对象,包含错误代码和错误信息。
     * @param t 返回的数据对象。
     * @param <T> 数据对象的类型。
     * @return 带有业务错误状态的响应对象。
     */
    protected <T> ResponseVO getBusinessErrorResponseVO(BusinessException e, T t) {
        ResponseVO vo = new ResponseVO();
        vo.setStatus(STATUC_ERROR);
        if (e.getCode() == null) {
            vo.setCode(ResponseCodeEnum.CODE_600.getCode());
        } else {
            vo.setCode(e.getCode());
        }
        vo.setInfo(e.getMessage());
        vo.setData(t);
        return vo;
    }

    /**
     * 构建一个表示服务器错误的响应。
     *
     * @param t 返回的数据对象。
     * @param <T> 数据对象的类型。
     * @return 带有服务器错误状态的响应对象。
     */
    protected <T> ResponseVO getServerErrorResponseVO(T t) {
        ResponseVO vo = new ResponseVO();
        vo.setStatus(STATUC_ERROR);
        vo.setCode(ResponseCodeEnum.CODE_500.getCode());
        vo.setInfo(ResponseCodeEnum.CODE_500.getMsg());
        vo.setData(t);
        return vo;
    }

}

异常处理器类

/**
 * 全局异常处理控制器,继承自ABaseController,用于处理应用程序抛出的异常。
 * 使用@RestControllerAdvice注解标识这是一个全局异常处理类。
 */
@RestControllerAdvice
public class AGlobalExceptionHandlerController extends ABaseController {

    private static final Logger logger = LoggerFactory.getLogger(AGlobalExceptionHandlerController.class);

    /**
     * 处理所有类型的异常。
     * @param e 抛出的异常对象。
     * @param request HTTP请求对象,用于获取请求URL。
     * @return 返回一个封装了异常信息的ResponseVO对象。
     */
    @ExceptionHandler(value = Exception.class)
    Object handleException(Exception e, HttpServletRequest request) {
        // 记录异常信息到日志
        logger.error("请求错误,请求地址{},错误信息:", request.getRequestURL(), e);

        ResponseVO ajaxResponse = new ResponseVO();

        // 根据不同的异常类型设置响应码和信息
        // 404 - 请求未找到
        if (e instanceof NoHandlerFoundException) {
            ajaxResponse.setCode(ResponseCodeEnum.CODE_404.getCode());
            ajaxResponse.setInfo(ResponseCodeEnum.CODE_404.getMsg());
            ajaxResponse.setStatus(STATUC_ERROR);
        } else if (e instanceof BusinessException) {
            // 业务异常
            // 业务错误
            BusinessException biz = (BusinessException) e;
            ajaxResponse.setCode(biz.getCode() == null ? ResponseCodeEnum.CODE_600.getCode() : biz.getCode());
            ajaxResponse.setInfo(biz.getMessage());
            ajaxResponse.setStatus(STATUC_ERROR);
        } else if (e instanceof BindException || e instanceof MethodArgumentTypeMismatchException) {
            // 参数绑定异常或参数类型不匹配异常
            // 参数类型错误
            ajaxResponse.setCode(ResponseCodeEnum.CODE_600.getCode());
            ajaxResponse.setInfo(ResponseCodeEnum.CODE_600.getMsg());
            ajaxResponse.setStatus(STATUC_ERROR);
        } else if (e instanceof DuplicateKeyException) {
            // 数据库主键重复异常
            // 主键冲突
            ajaxResponse.setCode(ResponseCodeEnum.CODE_601.getCode());
            ajaxResponse.setInfo(ResponseCodeEnum.CODE_601.getMsg());
            ajaxResponse.setStatus(STATUC_ERROR);
        } else {
            // 其他未指定的异常
            ajaxResponse.setCode(ResponseCodeEnum.CODE_500.getCode());
            ajaxResponse.setInfo(ResponseCodeEnum.CODE_500.getMsg());
            ajaxResponse.setStatus(STATUC_ERROR);
        }

        return ajaxResponse;
    }
}

测试类

@RestController
public class TestController extends ABaseController {
    @RequestMapping("/test")
    public ResponseVO test(){
        throw new BusinessException("登陆密码错误");
    }
}

响应结果

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

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

相关文章

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 7月2日,星期二

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年7月2日 星期二 农历五月廿七 1、 中指研究院&#xff1a;业主“以价换量”促交易特征明显&#xff0c;6月百城二手住宅价格继续下行。 2、 多家银行宣布&#xff01;停止手机银行ATM扫码取款服务&#xff0c;“安全”成为…

本地文本向量模型的部署提供兼容openai的接口

前言 之前部署了fastgpt官方文档的一个,提供的一个m3e-large的向量模型打包的docker镜像,虽然使用起来整体效果还可以,但是有些文本向量相似度匹配的结果还是不太满意的,目前,网络上层出不穷的带推理文本向量,想体验一下,于是我基于modelscope库封装了一个兼容open ai的…

11集在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》

【11集在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》】 这一集咱们一步一步的在doc下面编译TensorFlow Lite的例程 https://tensorflow.google.cn/lite/tutorials?hlzh-cn 进入这个例子&#xff1a; https://codelabs.developers.google.cn/codelabs/…

Hi3861 OpenHarmony嵌入式应用入门--wifi sta

鸿蒙WiFi STA模式相关的API接口文件路径 foundation/communication/interfaces/kits/wifi_lite/wifiservice/wifi_device.h 所使用的API接口有&#xff1a; API 接口说明 WifiErrorCode EnableWifi(void); 开启STA WifiErrorCode DisableWifi(void); 关闭STA int IsWif…

20240701给NanoPi R6C开发板编译友善之臂的Android12系统

20240701给NanoPi R6C开发板编译友善之臂的Android12系统 2024/7/1 14:19 本文采取这个模式编译&#xff1a;11.6.3 编译Android Tablet版本(首次编译) echo "ROCKCHIP_DEVICE_DIR : device/rockchip/rk3588/nanopi6" > .rockchip_device.mk # export INSTALL_GAP…

LangChain 开发智能Agent,你学会了吗?

Prompt Enginnering 是打开LLM宝库的一把金钥匙&#xff0c;如果prompt得法&#xff0c;并能将其技巧与某项工作深度结合&#xff0c;那必将大大增效。今天我们来聊聊如何优化Prompt设计、Prompt Template管理等技术和体力活&#xff0c;并赋能老喻干货店的营销活动。 LLM Pro…

ollama open-webui安装后报错401

查看日志 docker logs open-webui "GET /ollama/api/tags HTTP/1.1" 500 Internal Server Error "GET /ollama/api/version HTTP/1.1" 500 Internal Server Error "GET /openai/api/models HTTP/1.1" 401 Unauthorized 浏览器console报错

提升ChatGLM效能:仅需简单模型调整

本文作者&#xff1a; 赵桢、罗成、李亭骞、邹文艺 引言 自大语言模型 (LLM) 成为热点话题以来&#xff0c;涌现了一大批中文大语言模型并在优化平台中得到了积极部署。ChatGLM 正是广受好评的主流中文大语言模型之一。 然而&#xff0c;由于 ChatGLM 模型尚未成为 Transfo…

Echarts 问题集锦

最近公司集中做统计图表&#xff0c;新手小白&#xff0c;真被Echarts折腾地不轻&#xff0c;怕自己年老记忆衰退&#xff0c;特地做一些记录。以备后面查阅。 1、X轴的 数据显示不全&#xff0c;间或不显示 很奇葩&#xff0c;我发现数据里有一个值为0.0&#xff0c;当这条记…

Windows 解决文件包含病毒或潜在的垃圾软件

注意确保软件没问题&#xff0c;保护个人数据隐私 问题描述 解决步骤

科普文:一文搞懂jvm原理(三)执行引擎之垃圾回收器

概叙 科普文&#xff1a;一文搞懂jvm(一)jvm概叙-CSDN博客 科普文&#xff1a;一文搞懂jvm原理(二)类加载器-CSDN博客 科普文&#xff1a;一文搞懂jvm原理(三)执行引擎-CSDN博客 科普文&#xff1a;一文搞懂jvm原理(四)运行时数据区-CSDN博客 前面我们介绍了jvm&#xff0c…

基于java+springboot+vue实现的电影院购票系统(文末源码+Lw)274

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装电影院购票系统软件来发挥其高效地信息处理的作用&#xf…

Flink 容错机制

一致性检查点&#xff08;checkpoint&#xff09; 什么是 Checkpoint &#xff1f; Flink 故障恢复机制的核心&#xff0c;就就是应用状态的一致性检查点&#xff1b;有状态流应用的一直检查点&#xff0c;其实就是所有任务的状态&#xff0c;在某一时间点的一份拷贝&#xff…

月之暗面kimi底层推理系统原理

太长不看版&#xff08;作者大佬自己的在知乎碎碎念&#xff09;&#xff1a; 本论文与很多 Prefill/Decoding 分离的论文不同的是&#xff0c;这套方案已经在大规模集群上进行几个月的验证并证明了方案的有效性。目前这套系统承载了 Kimi 线上80% 以上的流量&#xff0c; 效果…

(18)GPS/指南针(一)

文章目录 前言 1 GPS/指南针 2 RTK GPS 3 GPS驱动程序选项 4 GPS自动切换 5 高级用途 前言 Copter/Plane/Rover 支持与 GPS、指南针和其他定位技术的整合&#xff1a; 1 GPS/指南针 Avionics Anonymous GNSS CompassAvionics Anonymous CompassBeitain BN-220 GPS / B…

《梦醒蝶飞:释放Excel函数与公式的力量》8.1 COUNT函数

8.1 COUNT函数 在Excel中&#xff0c;COUNT函数及其相关变体用于统计单元格中的数据量。它们能够帮助我们快速统计数据的数量&#xff0c;常用于数据分析和报表制作。 8.1.1 函数简介 COUNT函数用于统计指定区域内的数值单元格数量。它只统计数值&#xff0c;不包括文本或空…

XD3C03P1G、XD3C01N3F比例方向控制阀放大板

XD3A01N2G、XD3A03N2G、XD3C03N1F、XD3C03P1G、XD3C01N3F、XD3C03N2F、XD3C01P4G、XD3C03P3G、XD3C03N2F、XD3C03N2G、XDP3A01P1F、XDP3C03N2G、XDP3A03P3G、XDP3C01NAF、XDP3C03P6G、XDP3A03PAG、XDP3A03N3F液压比例方向阀是液压系统中的关键元件&#xff0c;用于实现对流量、…

二叉树的右视图-二叉树

199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 层序遍历&#xff0c;广度优先 queue先进后出&#xff0c;每层从左往右进树&#xff0c;最后一个就是最右边的数&#xff1b;pop掉这层的。push下一层&#xff1b; class Solution { public:vector<int> r…

考研生活day2--王道课后习题2.3.1、2.3.2、2.3.3

2.3.1 题目描述&#xff1a; 这题和曾经做过的LeetCode203.移除元素一模一样&#xff0c;所以我们就使用LeetCode进行书写&#xff0c;题目链接203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 解题思路 大家的第一反应肯定是根据书上所学的书写方法一样书写&…

【linux网络(七)】数据链路层详解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. 认识MAC…