万字长文带你逐步实现 SpringBoot 统一返回结果类

开发背景

现如今前后端分离已经是项目开发的主流方式,在前后端分离开发情形下,少不了前端和后端之间的友好交流,为了避免上升为物理交流,项目中必须要有一套规范有效的前后端协议格式。

后端开发的不同服务、不同业务处理并返回不同类型的数据,这不仅会增加巨大工作量来进行协议的输出,数据格式的多样化对于前端同事来讲也是一个灾难,这就需要对后端服务接口的返回格式定义成统一规范的结果类型。

前后端开发过程中数据交互规范化是一件非常重要的事情,不仅可以减少前后端交互过程中出现的问题,也让代码逻辑更加具有条理。

初始篇:从封装返回结果说起

返回结果类基本特征

对于后端的返回数据,考虑将格式统一后返回,在开发大量后端服务接口之后,根据开发经验可以总结得到,请求一个接口时需要关注的指标有:

  • 响应状态码,即请求接口返回状态码,如 HTTP 请求中的 200、304、500 等状态
  • 响应结果描述,有些接口请求成功或失败需要返回描述信息供前端展示
  • 响应结果数据,大部分的接口都会返回后端获取的数据,并以列表的形式展示的前端页面中
  • 是否成功:在实际项目中请求接口时,首先要关注的应该是接口的请求是否成功,然后才会去关注成功返回数据或者错误代码和信息,在统一数据中可以加入请求是否成功的标识,当然接口的成功与否也可以根据状态码可以判断,可以根据实际需求考虑是否定义结果状态
  • 其他标识:为了显示更多接口调用的信息,可能会根据实际的业务需求加入接口调用的时间信息等。

除了以上属性特征外,返回结果类在定义时还应该满足:

  1. 属性私有化,使用 get/set 方法来操作属性值
  2. 构造器私有化,外部只可以调用方法,初始化要在类内部完成
  3. 由于外部需要直接调用方法,因此方法要定义为静态方法

松散的自定义返回结果

根据上述对返回结果基本特征的分析,我们可以定义一个如下代码所示为的返回结果类

public class Result {
   
    private Integer code;
    private String desc;
    private Object data;
    
    // 是否请求成功,本文使用 code = 10000 特指成功,其余为失败,因此不再冗余 success
    // private Boolean success;
    //请求时间,暂时不需要,可根据需求定义
    //private long timestamp;
    
    //构造器私有
    private Result() {
   }
    
    //get/set 方法
    public Boolean getSuccess() {
   
        return success;
    }

    public void setSuccess(Boolean success) {
   
        this.success = success;
    }

    public String getCode() {
   
        return code;
    }

    public void setCode(String code) {
   
        this.code = code;
    }

    public String getDesc() {
   
        return desc;
    }

    public void setDesc(String desc) {
   
        this.desc = desc;
    }

    public Object getData() {
   
        return data;
    }

    public void setData(Object data) {
   
        this.data = data;
    }
    
    /**
     * 返回通用成功
     * @return Result
     */
    public static Result ok(){
   
        Result result = new Result();
        result.setSuccess(true);
        result.setCode("20000");
        result.setDesc("请求成功");
        return result;
    }

    /**
     * 返回通用失败,未知错误
     * @return Result
     */
    public static Result error(){
   
        Result result = new Result();
        result.setSuccess(false);
        result.setCode(20001);
        result.setDesc("请求失败");
        return result;
    }
}

lombok:代码简洁利器

为了减少 get/set 等代码内容,引入了 lombok 工具,并使用注解 @Data 标注,代表当前类默认生成 set/get 方法

@Data
public class Result {
   
    private Integer code;
    private String desc;
    private Object data;
    
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爪哇程序人生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值