BaseResult返回结果封装工具类示例

        在前后端分离的项目中,后端除了开发自己的部分还要回传数据到前端,这里推荐一种返回结果工具类,在组件之间进行Http调用或RPC调用时,约定标准的返回对象,便于统一对结果集进行处理。

示例

1.BaseCode基础状态码枚举类
public enum BaseCode {

    /**
     * 表示请求成功完成,并返回响应数据
     */
    SUCCESS("2000", "SUCCESS"),
    /**
     * 表示成功创建了资源,并返回响应数据
     */
    CREATED("2001", "CREATED"),
    /**
     * 表示成功更新了数据,并返回响应数据
     */
    UPDATED("2002", "UPDATED"),
    /**
     * 表示成功处理了请求,但没有返回响应数据
     */
    NO_CONTENT("2004", "NO_CONTENT"),
    /**
     * 表示成功上传了文件,并返回响应数据
     */
    UPLOADED("2005", "UPLOADED"),
    /**
     * 表示成功下载了文件,并返回响应数据
     */
    DOWNLOADED("2006", "DOWNLOADED"),
    /**
     * 表示客户端发出了错误的请求,例如请求参数错误或缺失
     */
    BAD_REQUEST("4000", "BAD_REQUEST"),
    /**
     * 表示未经授权,需要进行身份验证
     */
    UNAUTHORIZED("4001", "UNAUTHORIZED"),
    /**
     * 表示禁止访问,请求被拒绝
     */
    FORBIDDEN("4003", "FORBIDDEN"),
    /**
     * 表示请求的资源不存在
     */
    NOT_FOUND("4004", "NOT_FOUND"),
    /**
     * 表示请求重复
     */
    DUPLICATE_REQUEST("4005", "DUPLICATE_REQUEST"),
    /**
     * 不被允许的上传文件格式
     */
    NOT_ALLOWED_FILE_FORMAT("4006", "NOT_ALLOWED_FILE_FORMAT"),
    /**
     * 表示用户名或密码错误
     */
    USERNAME_PASSWORD_ERROR("1001", "USERNAME_PASSWORD_ERROR"),
    /**
     * 表示权限不足,无法执行请求的操作
     */
    INSUFFICIENT_PERMISSIONS("1002", "INSUFFICIENT_PERMISSIONS"),
    /**
     * 表示请求的资源已存在
     */
    RESOURCE_ALREADY_EXISTS("1003", "RESOURCE_ALREADY_EXISTS"),
    /**
     * 表示服务器处理异常
     */
    SERVER_INTERNAL_ERROR("5000", "SERVER_INTERNAL_ERROR");

    private final String code;
    private final String message;

    BaseCode(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public String getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    public static String getMessageByCode(String code) {
        for (BaseCode baseCode : BaseCode.values()) {
            if (baseCode.code.equals(code)) {
                return baseCode.message;
            }
        }
        return null;
    }

}
2.BaseResult返回结果类
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
public class BaseResult<E> implements Serializable {
    //实现序列化接口,标识此类可以被序列化
    private Boolean success;

    private String code;

    private String msg;

    private E data;

    //不同可选参数的构造方法
    public BaseResult(Boolean success, String code, String msg) {
        this.success = success;
        this.code = code;
        this.msg = msg;
    }

    public BaseResult(Boolean success, String code, String msg, E data) {
        this.success = success;
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    //不带参数的静态方法,通过类名直接调用
    public static <T> BaseResult<T> success() {
        return new BaseResult<>(true, BaseCode.SUCCESS.getCode(), BaseCode.SUCCESS.getMessage());
    }

    //带不同参数的静态方法,根据接口返回值的要求自行选择
    //实例:return BaseResult.success(...);
    public static <T> BaseResult<T> success(T data) {
        return new BaseResult<>(true, data == null ? "2004" : BaseCode.SUCCESS.getCode(), data == null ? BaseCode.getMessageByCode("2004") : BaseCode.SUCCESS.getMessage(), data);
    }

    public static <T> BaseResult<T> success(String code, String message, T data) {
        return new BaseResult<>(true, code, message, data);
    }

    public static <T> BaseResult<T> success(String code, String message) {
        return new BaseResult<>(true, code, message);
    }

    public static <T> BaseResult<T> fail() {
        return new BaseResult<>(false, BaseCode.BAD_REQUEST.getCode(), BaseCode.BAD_REQUEST.getMessage());
    }

    public static <T> BaseResult<T> fail(String code) {
        return new BaseResult<>(false, code, BaseCode.getMessageByCode(code));
    }

    public static <T> BaseResult<T> fail(String code, String message) {
        return new BaseResult<>(false, code, message);
    }

    public static <T> BaseResult<T> fail(String code, String message, T data) {
        return new BaseResult<>(false, code, message, data);
    }

    public static <T> BaseResult<T> status(String code) {
        return new BaseResult<>(true, code, BaseCode.getMessageByCode(code));
    }
}
3.暴露接口测试

MessageUtils支持多语言工具类详情可以参考这个

https://blog.csdn.net/TM007_/article/details/134135064

@RestController//当前类交给springboot管理,并且自动对返回值进行转换
@RequestMapping("/hello")
public class UserController{

    @GetMapping("/testResult")
    public BaseResult testNews(Integer num) {
        if(num<0){
            return BaseResult.fail("4000",MessageUtils.get("number.not.right"));
        }
        return BaseResult.success("输入的数是:"+num);
    }
}

4.接口测试

        返回值编码可以和前端协调一个指定值,来标识返回的各种状态

以上便是全部内容了,欢迎各位小伙伴留言讨论

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先锋 Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值