统一返回封装类ResponseResult

统一返回封装类ResponseResult

1、 ResponseResult

java 复制代码
/**
 * @author: yc
 * @des:  统一返回封装类
 * @date: 2024/08/07 14:08
 */
@Data
@NoArgsConstructor
public class ResponseResult<T> {
    
    /**
     * 请求时间
     */
    private String requestTime;

    /**
     * 响应时间
     */
    private String responseTime;

    /**
     * 响应码
     */
    private int code;

    /**
     * 描述信息
     */
    private String msg;

    /**
     * 耗时 毫秒
     */
    private String takeTime;
    
    /**
     * 数据
     */
    private T data;
    
    /**
     * 总数据量
     */
    private int total;

    public ResponseResult(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
        if (data instanceof Collection) {
            this.total = ((Collection<?>) data).size();
        }
    }
    
    public static <T> ResponseResult<T> fail(Integer code,String msg) {
        return new ResponseResult<>(code, msg, null);
    }

    public static <T> ResponseResult<T> data(T data) {
        return data(data,Constant.DEFAULT_NULL_MESSAGE);
    }

    public static <T> ResponseResult<T> data(T data, String msg) {
        return data(RespBizCodeEnum.BIZ_0.getCode(), data, msg);
    }

    public static <T> ResponseResult<T> data(int code, T data, String msg) {
        return new ResponseResult<>(code, data == null ? Constant.DEFAULT_NULL_MESSAGE : msg, data);
    }

}

2、返回状态枚举RespBizCodeEnum

java 复制代码
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum RespBizCodeEnum {
    BIZ_0(0, "成功"),
    BIZ_10001(10001, "不符合要求的请求参数,具体说明参考msg"),
    BIZ_10002(10002, "完成,但没有数据"),
    BIZ_10003(10003, "无权限,请求要求身份验证"),
    BIZ_10004(10004, "IP未设置白名单"),
    BIZ_10005(10005, "禁止访问"),
    BIZ_20001(20001, "无该用户"),
    BIZ_20002(20002, "密码错误"),
    BIZ_30001(30001, "该业务未实现"),
    BIZ_99900(99900, "程序执行异常,msg中程序的异常信息"),
    BIZ_99999(99999, "服务器遇到错误,无法完成请求,查看msg,或联系运维人员"),
    ;

    private Integer code;

    private String msg;

}

3、统一响应类处理AOP

3.1 aspectj pom依赖
xml 复制代码
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.7</version>
        </dependency>
3.2 ResponseTimeAspect
java 复制代码
/**
 * @author: yc
 * @des:  统一响应类处理
 * @date: 2024/08/07 14:15
 */
@Aspect
@Component
public class ResponseTimeAspect {

    @Around("execution(* com.yc.core.controller..*.*(..))")
    public Object disposeResponseResult(ProceedingJoinPoint joinPoint) throws Throwable {
        String startTimeStr = DateUtil.date().toString();
        long startTime = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        String endTimeStr = DateUtil.date().toString();
        long endTime = System.currentTimeMillis();
        long responseTime = endTime - startTime;
        if (result instanceof ResponseResult) {
            ((ResponseResult<?>) result).setRequestTime(startTimeStr);
            ((ResponseResult<?>) result).setResponseTime(endTimeStr);
            ((ResponseResult<?>) result).setTakeTime(String.valueOf(responseTime));
        }
        return result;
    }

}

4、controllrt

java 复制代码
/**
 * @author: yc
 * @des:  测试
 * @date: 2024/08/07 13:58
 */
@RestController
@RequestMapping("test")
public class TestController {

    @PostMapping("hello")
    public ResponseResult<String> hello(){
        return ResponseResult.data("hello");
    }

}

5、结果截图

相关推荐
woai336443 分钟前
项目-轻客管家1-环境准备
java
xqqxqxxq8 小时前
Java AI智能P图工具技术笔记
java·人工智能·笔记
谷雨不太卷8 小时前
进程的状态码
java·前端·算法
顾温8 小时前
default——C#/C++
java·c++·c#
空中海8 小时前
02 ArkTS 语言与工程规范
java·前端·spring
楚国的小隐士8 小时前
在AI时代,如何从0接手一个项目?
java·ai·大模型·编程·ai编程·自闭症·自闭症谱系障碍·神经多样性
yaki_ya8 小时前
yaki-C语言:从概念基础到内存解析---数组(array)完全指南
java·c语言·算法
刃神太酷啦8 小时前
扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)
java·c语言·javascript·数据结构·c++·算法·leetcode
亚历克斯神8 小时前
Java 25 模式匹配增强:让代码更简洁优雅
java·spring·微服务
星辰徐哥8 小时前
Rust异步测试与调试的实践指南
android·java·rust