子模块介绍,开发规范说明和工具类封装

在上一章的内容中,我们完成了聚合工程的搭建以及工程依赖的导入

当然我们会延续上一章的传统提供一个传送门给各位,如未完成上一章内容,请点击左侧->传送门

概述子模块

上一章我们已经创建了整个聚合工程

该聚合工程有以下子模块

XML 复制代码
 <modules>
        <module>xxx-common</module>
        <module>xxx-account</module>
        <module>xxx-engine</module>
        <module>xxx-data</module>
        <module>xxx-gateway</module>
    </modules>

我们来一一介绍

xxx-common

这是一个公共的包,包含很多的工具类

xxx-account

关于用户相关的类

xxx-engine

最重要的模块,压测引擎,分为三大板块:接口自动化、UI自动化、压测

xxx-data

有关数据的内容

xxx-gateway

有关网关的内容

接下来就讲一下工具类

工具类封装

JsonData

这个Java类用于封装返回给客户端的JSON数据,接下来逐一解释。

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class JsonData {

这三个注释其实就是由Lombok库提供的,用于自动生成常用的数据封装方法。

java 复制代码
 /**
  * 状态码 0 表示成功
  */
 private Integer code;
 /**
  * 数据
  */
 private Object data;
 /**
  * 描述
  */
 private String msg;

以上是这个类最关键的三个成员变量,code是和http响应码不同的,data存放的是返回来的数据,msg用于存储返回结果的描述和错误信息。

java 复制代码
public <T> T getData(Class<T> typeReference)
{
    return JSON.parseObject(JSON.toJSONString(data),typeReference);
}

先将data对象转换成JSON字符串,然后再将这个JSON字符串转换成typeReference类型的对象,最后返回这个转换后的对象。

getData() 方法使用了 JSON 库的 parseObject()toJSONString() 方法,将 JsonData 对象中的 data 属性转换为目标类型的对象。这使得在使用 JsonData 对象时,可以方便地获取存储的数据,并将其转换为所需的类型进行后续操作。

java 复制代码
public static JsonData buildSuccess() 
{
    return new JsonData(0, null, null);
}

这是一个静态方法,用于构建表示成功的JsonData对象,不传入任何数据。

java 复制代码
public static JsonData buildSuccess(Object data) 
{
    return new JsonData(0, data, null);
}

这是另一个静态方法,用于构建表示成功的JsonData对象,并传入数据。

java 复制代码
public static JsonData buildCodeAndMsg(int code, String msg) 
{
    return new JsonData(code, null, msg);
}

这是一个静态方法,用于构建表示错误的JsonData对象,并传入描述信息。

java 复制代码
public static JsonData buildResult(BizCodeEnum codeEnum)
{
    return JsonData.buildCodeAndMsg(codeEnum.getCode(),codeEnum.getMessage());
}

这是一个静态方法,接收一个自定义的枚举类型BizCodeEnum,通过该枚举对象的状态码和描述信息构建JsonData对象。

java 复制代码
public boolean isSuccess()
{
    return code == 0;
}

这是一个实例方法,用于判断JsonData对象是否表示成功,如果状态码为0,则返回true,否则返回false

BizException

java 复制代码
@Data
public class BizException extends RuntimeException {

    private int code;
    private String msg;
    private String detail;
    public BizException(Integer code, String message) {
        super(message);
        this.code = code;
        this.msg = message;
    }

    public BizException(BizCodeEnum bizCodeEnum){
        super(bizCodeEnum.getMessage());
        this.code = bizCodeEnum.getCode();
        this.msg = bizCodeEnum.getMessage();
    }

    public BizException(BizCodeEnum bizCodeEnum,Exception e){
        super(bizCodeEnum.getMessage());
        this.code = bizCodeEnum.getCode();
        this.msg = bizCodeEnum.getMessage();
        this.detail = e.toString();
    }
}

@Data 注解由 Lombok库提供,用于自动生成 getter、setter 方法等。
BizException 类继承了 RuntimeException,表示它是一个运行时异常。
类中定义了一些属性,包括错误码 code、错误信息 msg 和详细信息 detail。
BizException 类提供了多个构造方法,用于创建不同类型的业务异常对象。构造方法根据传入的参数设置对应的属性值。

CustomExceptionHandler

java 复制代码
@ControllerAdvice
//@RestControllerAdvice
@Slf4j
public class CustomExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public JsonData handler(Exception e){

        if(e instanceof BizException bizException){
            log.error("[业务异常]{}",e);
            return JsonData.buildCodeAndMsg(bizException.getCode(),bizException.getMsg());
        }else {
            log.error("[系统异常]{}",e);
            return JsonData.buildError("系统异常");
        }

    }

}

@ControllerAdvice 注解表示这是一个全局异常处理类,用于处理应用程序中出现的异常。

@Slf4j注解添加了日志记录功能。

@ExceptionHandler注解用于指定处理异常的方法。

@ResponseBody 注解表示方法返回的是响应体数据,而不是视图页面。

相关推荐
Root_Hacker3 分钟前
include文件包含个人笔记及c底层调试
android·linux·服务器·c语言·笔记·安全·php
一嘴一个橘子8 分钟前
mybatis - 动态语句、批量注册mapper、分页插件
java
组合缺一9 分钟前
Json Dom 怎么玩转?
java·json·dom·snack4
REDcker14 分钟前
RESTful API设计规范详解
服务器·后端·接口·api·restful·博客·后端开发
seabirdssss19 分钟前
《bootstrap is not defined 导致“获取配置详情失败”?一次前端踩坑实录》
前端·bootstrap·html
危险、26 分钟前
一套提升 Spring Boot 项目的高并发、高可用能力的 Cursor 专用提示词
java·spring boot·提示词
kgduu29 分钟前
js之表单
开发语言·前端·javascript
kaico201830 分钟前
JDK11新特性
java
钊兵31 分钟前
java实现GeoJSON地理信息对经纬度点的匹配
java·开发语言
微学AI33 分钟前
内网穿透的应用-告别局域网束缚!MonkeyCode+cpolar 解锁 AI 编程新体验
linux·服务器·网络