SpringBoot创建一个初始化项目

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

文章目录


前言

搭建一个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("登陆密码错误");
    }
}

响应结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI奥林匹克竞赛:Claude-3.5-Sonnet对决GPT-4o,谁是最聪明的AI?

目录 实验设置 评估对象 评估方法 结果与分析 针对学科的细粒度分析 GPT-4o vs. Claude-3.5-Sonnet GPT-4V vs. Gemini-1.5-Pro 结论 AI技术日新月异&#xff0c;Anthropic公司最新发布的Claude-3.5-Sonnet因在知识型推理、数学推理、编程任务及视觉推理等任务上设立新…

网络攻防题录集

文章目录 第一章 网络攻防概述第二章 密码学第三章 网络协议脆弱性分析第四 自测题三第五章 自测题五第六章 自测题六第七章 自测题七第八章 自测题八第九章 自测题九第十章 自测题十第十一章 自测题十一第十二章 自测题十二第十三章 自测题十三 第一章 网络攻防概述 第一代安…

Anti-Canine Heartworm Antibody (Chicken) - HRP Conjugated

犬心丝虫&#xff08;学名Dirofilaria immitis&#xff09;是一种寄生丝虫&#xff0c;通过蚊子叮咬而传播。感染犬在早期阶段&#xff0c;大多不会出现症状。随着病情发展&#xff0c;将出现咳嗽、呼吸困难等症状&#xff0c;并伴有右心功能衰竭&#xff0c;最终全身衰弱或虚脱…

2008-2022年款哈弗维修手册和电路图线路图接线图资料更新

经过整理&#xff0c;2005-2022年款长城哈弗全系列已经更新至汽修帮手资料库内&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照…

关于windows,wifi图标显示不了的解决方法

解决方法一&#xff08;解决了我的问题的方法&#xff09;&#xff1a; winr -->输入 regedit 打开注册表 --> 删除HKEY-CLASSES_ROOT\CLSID\{3d09c1ca-2bcc-40b7-b9bb-3f3ec143a87b} CLSID在下面仔细找&#xff0c;然后找到09开头那个删掉重启就可以了&#xff0c;可能…

工程师这几招降低电机EMI的方法,提高系统电磁兼容性能

通过在电机端子之间放置陶瓷电容器、工模滤波器或BDL滤波器均可抑制差模和共模噪声&#xff0c;以提高系统的EMC性能。工程师在本文详细介绍这几种降低电机EMI的方法。 EMC和EMI背景 电磁干扰(EMI)是系统上的电磁噪声的辐射或感应。与大多数电磁电路组件一样&#xff0c;直流…

大数据开发中的数据倾斜问题

数据倾斜是大数据开发中常见的性能瓶颈&#xff0c;了解其原因并采取有效的解决方案对系统性能至关重要。本文将从数据倾斜的影响、解决方法及示例代码等方面进行详细讨论。 目录 1. 数据倾斜的影响2. 解决数据倾斜的方法调整分区键预聚合倾斜处理逻辑 3. 进一步解决数据倾斜的…

深入解析 androidx.databinding.Bindable 注解

在现代 Android 开发中&#xff0c;数据绑定 (Data Binding) 是一个非常重要的技术。它使得我们能够简化 UI 和业务逻辑之间的连接&#xff0c;从而提高代码的可读性和维护性。在数据绑定中&#xff0c;Bindable 注解是一个关键部分&#xff0c;它帮助我们实现双向数据绑定和自…

SAP Build 3-调用SAP BAPI和调用S4HC API

1. 调用SAP BAPI 1.1 前提 项目已创建 SAP环境登录正常 1.2 引入BAPI SDK 商店中下载BAPI SDK Process中导入BAPI SDK 1.3 新建action group 新建action group时&#xff0c;会要求填写SAP登录信息&#xff0c;根据连接类型分为SSO&#xff0c;Basic和Custom 如果选择SS…

数据恢复篇:如何在 Android 手机上恢复未保存/删除的 Word 文档

在 Android 手机上访问 Word 文档通常很简单&#xff0c;但是当这些重要文件被删除或未保存时会发生什么&#xff1f;这种情况虽然令人痛苦&#xff0c;但并非毫无希望。到 2024 年&#xff0c;有几种强大的方法来处理此类数据丢失。本指南重点介绍如何在Android手机上恢复已删…

AI时代创新潮涌,从探路到引路,萤石云引领千行百业创新

步入AI新时代&#xff0c;AI、云计算、大数据等技术迅速迭代&#xff0c;并日益融入经济社会发展各领域全过程&#xff0c;数字经济成为推动千行百业转型升级的重要驱动力量。 今年的政府工作报告提出&#xff0c;深入推进数字经济创新发展。积极推进数字产业化、产业数字化&a…

UnityUGUI之二 CameraTargetTexture

在我们需要将3D物体呈现在2D视角时就可以使用TargetTexture&#xff0c;若想只显示3D物体则需改变背景颜色&#xff0c;并且得再增加一个相机

为什么我学个 JAVA 就已经耗尽所有而有些人还能同时学习多门语言

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;我的入门语言是C&#xff0c…

Spring两大核心思想 IoC和AoP

目录 ✨ 一、什么是IoC 1、定义 &#x1f38a; 2、IoC思想 &#x1f38a; 3、优势 &#x1f38a; 4、对象的管理 &#x1f38a; 存对象&#xff1a;Component 取对象&#xff1a;AutoWired ✨二、什么是DI 1、定义 &#x1f38a; 2、IoC和DI的关系&#x1f38a; 可…

Stable Diffusion【真人模型】:人脸特美的人像摄影大模型wuhaXL_realisticMixV3.0

今天和大家分享一个基于SDXL的真人大模型&#xff1a;wuhaXL_realisticMix。该模型无需使用LORA**就能生成的特别漂亮的人脸&#xff0c;虽然有时候人脸有些假&#xff0c;但是生成的人脸确实非常漂亮。 该模型底模融合了WhiteXL_realisticMix&#xff0c;训练素材来自于视频转…

nacos开启认证之后,服务就无法注册了

作者介绍&#xff1a;计算机专业研究生&#xff0c;现企业打工人&#xff0c;从事Java全栈开发 主要内容&#xff1a;技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流&#xff08;SCI论文两篇&#xff09; 上点关注下点赞 生活越过…

机器学习项目-基于随机森林的航空公司用户满意度分析

摘要 ​ 航空旅行是人们出行的常用方式之一&#xff0c;乘客对于航空公司的服务质量有着较高的要求。满意度是衡量服务质量的重要指标&#xff0c;因此预测航空公司乘客的满意度对于提高服务质量具有重要意义。 ​ 近年来&#xff0c;机器学习在预测领域得到了广泛应用。机器…

08 - Python面向对象编程进阶

面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识&#xff0c;知道了如何定义类&#xff0c;如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发&#xff0c;我们还需要对Python中的面向对象编程进行更为深入的了解。 property装…

mst[讲课留档]

最小生成树(Minimum Spanning Tree) (1)概念 我们知道&#xff0c;树是有 n n n个结点&#xff0c; n − 1 n-1 n−1条边的无向无环的连通图。 一个连通图的生成树是一个极小的连通子图&#xff0c;它包含图中全部的 n n n个顶点&#xff0c;但只有构成一棵树的 n − 1 n-1 …

SAP实现特别总账的凭证预制

SAP实现特别总账的凭证预制 仔细理解只有”其他”的特殊总帐标识才可预制凭证这句话. F-29/f-48不可预制。F-29/f-48预制时出现错误消息号 FP 030&#xff0c;提示特殊总帐标志类型“汇票和”预付定金“的特别总帐标志的过帐代码不能预制&#xff0c;这是系统写死的&#xff…